Liste du code Python utilisé dans l'analyse de Big Data

Environnement

Créer un environnement virtuel

$ python3 -m venv test

Activation de l'environnement virtuel

$ source test/bin/activate
(test)$

Désactiver l'environnement virtuel

(test)$ deactivate
$

Traitement des chaînes

Découpez une chaîne de caractères

s = "2019-06-01"
print(f"{s[0:4]}-{s[5:7]}-{s[8:10]}")

échapper

Échapper aux crochets ondulés

--Echappez les crochets ondulés avec des crochets ondulés.

var = 'aiuto'
print( f"val is {{{var}}}" )

Manipulation d'annuaire

Créer un répertoire

import os

os.makidirs('tmp', exist_ok=True)

class

classsample
├── main.py
└── prop
    └── user_property.py

main.py

from prop.user_property import UserProperty

user_property = UserProperty({'first_name': 'Ichiro', 'family_name': 'tester'})
print(f'{user_property.FAMILY_NAME} {user_property.FIRST_NAME}')

prop/user_property.py

from typing import ClassVar, Dict, List, Any

class UserProperty:
    def __init__(self, kwargs: Dict[str, Any]):
        self.FIRST_NAME = kwargs['first_name']
        self.FAMILY_NAME = kwargs['family_name']

Résultat d'exécution

$ python main.py
Tester Ichiro

subprocess

Exécuter la commande shell

import subprocess

c = ['hadoop', 'fs', '-rm', '-r', '/tmp/test']
subprocess.run(c)

Exécution parallèle de commandes shell avec xargs

c = 'ls tmp/* | xargs -L 1 -P 10 -t bash -c \'cat $0 | test.sh -'
p = subprocess.Popen(c, shell = True)
p.wait()

#Traitement ultérieur

Gestion de la sortie standard

click

click
├── cli.py
└── command
    └── hello
        └── cli.py

click/cli.py

import click

from command.hello.cli import hello

@click.group()
def entry_point():
    print('click/cli.message py.')

entry_point.add_command(hello)

def init():
    entry_point(**{})

if __name__ == '__main__':
    init()

click/command/hello/cli.py

import click

@click.command('hello')
@click.option('--msg', '-m', 'msg', type=str, help='Saisissez le message que vous souhaitez afficher.')
def hello(**kwargs):
    print(f'Message entré:{kwargs["msg"]}')
    print('click/cmd/hello/cli.message py.')
$ python cli.py hello -m 'tester'
click/cli.message py.
Message entré: Test
click/cmd/hello/cli.message py.

pandas

tsv lire

import pandas as pd

df = pd.read_csv('user.tsv', delimiter='\t', header=None, names=['id', 'name'], dtype={'id': str, 'name': str}, low_memory=False)

sortie tsv

df.to_csv('test.tsv', sep='\t')

Sortie en spécifiant une colonne spécifique

columns = ['id', 'name']
df[colums].to_csv('test.tsv', sep='\t', index=False)

Sortie en réduisant le nombre de cas

df.sample(n=100).to_csv('test.tsv', sep='\t')

Suppression de ligne en double

df.drop_duplicates()

Utiliser des guillemets doubles dans la requête

df.query('row_name.str.contains("\\\"keyword\\\"")')

La gestion des erreurs

Élimination du script Python

import sys

sys.exit(1)

Vérification de l'existence du fichier

―― Utilisé pour voir si vous disposez des entrées nécessaires avant d'effectuer l'analyse des données.

import os

if os.path.exists():
    print('Le fichier existe. Effectue le traitement ultérieur.')
else:
    print('Le fichier n'existe pas. Le processus se termine.')
    sys.exit(1)

Enregistrement

--Utilisez la journalisation du module standard de Python.

test
├── module
│   └── sub.py
└── main.py

main.py

#Module fait maison
import module.sub as sub

from logging import CRITICAL, DEBUG, ERROR, INFO, WARNING
from logging import NullHandler, StreamHandler, basicConfig, getLogger, Formatter
from logging.handlers import TimedRotatingFileHandler

logger = getLogger(__name__)
logger.addHandler(NullHandler())
logger.setLevel(DEBUG)
sh = StreamHandler()

def init() -> None:
    basicConfig(
        handlers=[sh],
        format="[%(asctime)s] %(name)s %(levelname)s: %(message)s",
        datefmt="%y-%m-%d %H:%M:%S",
    )
    root_logger = getLogger()
    root_logger.setLevel(DEBUG)

    rfh = TimedRotatingFileHandler(
        "log/test.log",
        when="midnight",
        backupCount=30,
    )
    format_template = (
        f"PID:%(process)d [%(asctime)s] %(name)s %(levelname)s: %(message)s"
    )
    log_format = Formatter(fmt=format_template, datefmt="%y-%m-%d %H:%M:%S")
    rfh.setFormatter(log_format)
    root_logger.addHandler(rfh)

    logger.debug("Lancer l'exécution du script")

if __name__ == "__main__":
    init()
    #Appelez la fonction de votre propre module
    sub.hello()

module/sub.py

from logging import getLogger

logger = getLogger(__name__)

def hello():
    print('hello! this is sub module.')
    logger.debug('Sortie du sous-module')
$ python main.py
[20-06-25 14:20:56] __main__ DEBUG:Lancer l'exécution du script
hello! this is sub module.
[20-06-25 14:20:56] module.sub DEBUG:Sortie du sous-module

$ head log/test.log
PID:15171 [20-06-25 14:20:56] __main__ DEBUG:Lancer l'exécution du script
PID:15171 [20-06-25 14:20:56] module.sub DEBUG:Sortie du sous-module

Autre

Obtenez le nombre de fichiers

cnt = str(sum(1 for line in open('test.tsv')))

Faire du fichier une chaîne d'une ligne

main.py

import os

def load_file_as_one_line(file, sep):
    with open(file) as f:
        lines_one_str = ''
        # a\nb\nc\n -> a|b|c|d
        lines = f.readlines()
        for line in lines:
            w = line.rstrip(os.linesep)
            if(w != ''):
                lines_one_str += w + sep
        return lines_one_str[:-1]

print(load_file_as_one_line('data.txt', '|'))
$ cat data.txt
tester
test
texte
text
Goût
$ python main.py
tester|test|texte|text|Goût|taste

Générer dynamiquement un répertoire pour la partition de date

main.py

import datetime
from dateutil.relativedelta import relativedelta

def out_term(year, month, term, base_dir):
    d = datetime.date(year, month, 1)
    txt = ""

    for i in range(term):
        txt += base_dir + (d + relativedelta(months=i)).strftime("%Y/%m")
        if(i != term - 1) :
            txt += ","
    return txt
    
def out_reverse_term_by_day(d, reverse_term, base_dir):
    txt = ""
    
    d = d - relativedelta(days=reverse_term - 1)
    for i in range(reverse_term):
        txt += base_dir + (d + relativedelta(days=i)).strftime("%Y/%m/%d")
        if(i != reverse_term - 1) :
            txt += ","
    return txt

# 2019-Préparer un annuaire pendant 11 à 4 mois
print(out_term(2019, 11, 4, '/tmp/input/'))
# 2019-11-Préparez un annuaire qui remonte à 5 jours depuis 02
print(out_reverse_term_by_day(datetime.date(2019, 11, 2), 5, '/tmp/input/'))

Résultat d'exécution

$ python main.py
/tmp/input/2019/11,/tmp/input/2019/12,/tmp/input/2020/01,/tmp/input/2020/02
/tmp/input/2019/10/29,/tmp/input/2019/10/30,/tmp/input/2019/10/31,/tmp/input/2019/11/01,/tmp/input/2019/11/02

Incorporer dynamiquement des expressions conditionnelles, des chemins, etc. dans des modèles Pig

--Définissez le mot que vous souhaitez remplacer dans le dictionnaire et la valeur que vous souhaitez remplacer, puis générez un Pig intégré dans le modèle.

main.py

def substitute_condition(template, output, target_word, condition):
    txt = ''
    with open(template) as f:
        lines_one_str = f.read()
        txt = lines_one_str.replace(target_word, condition)
    with open(output, mode='w') as f:
        f.write(txt)

def translate(template: str, output: str, d: {str, str}):
    for i, (k, v) in enumerate(d.items()):
        if i == 0:
            substitute_condition(template, output, k, v)
        else:
            substitute_condition(output, output, k, v)
    
d = {'$INPUT': '/tmp/input', '$COND': 'tester|test', '$OUTPUT': '/tmp/output'}
translate('template.pig', 'output.pig', d)

Courir

$ python main.py

template.pig

L = LOAD '$INPUT' USING PigStorage('\t');
F = FILTER L BY note matches '$COND';
FS -rm -r -f -skipTrash $OUTPUT
STORE F INTO '$OUTPUT' USING PigStorage('\t', '-schema');

output.pig

L = LOAD '/tmp/input' USING PigStorage('\t');
F = FILTER L BY note matches 'tester|test';
FS -rm -r -f -skipTrash /tmp/output
STORE F INTO '/tmp/output' USING PigStorage('\t', '-schema');

envoyer un e-mail

def send_mail(subject: str, body: str, from: str, to: str, svr: str, port: str, id: str, password: str):
    msg = MIMEText(body, 'html')
    msg['Subject'] = subject
    msg['From'] = from
    msg['To'] = to

    server = smtplib.SMTP_SSL(svr, port)
    #Pour SSL
    # server = smtplib.SMTP_SSL(svr, port, context=ssl.create_default_context())
    server.login(id, password)
    server.send_message(msg)

Recommended Posts

Liste du code Python utilisé dans l'analyse de Big Data
Environnement enregistré pour l'analyse des données avec Python
Liste des principales distributions de probabilité utilisées en apprentissage automatique et statistiques et code en python
Décrypter une ligne de code en Python lambda, carte, liste
Résumé des méthodes d'analyse de données statistiques utilisant Python qui peuvent être utilisées en entreprise
Une analyse simple des données de Bitcoin fournie par CoinMetrics en Python
[Linux] Liste des commandes Linux utilisées dans la pratique
Afficher une liste d'alphabets en Python 3
Analyse de données python
Résumé des méthodes intégrées, etc. de la liste Python
Obtenir la liste de codes EDINET en Python
Lecture de code de faker, une bibliothèque qui génère des données de test en Python
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Copiez la liste en Python
Visualisation en temps réel des données thermographiques AMG8833 en Python
Analyse de données en Python: une note sur line_profiler
L'histoire de la lecture des données HSPICE en Python
Code souvent utilisé dans les applications Python / Django [préfectures]
Liste de code Python à déplacer et à mémoriser
Analyse statique du code Python avec GitLab CI
Liste triée en Python
Analyse de données avec python 2
Liste des modules python
La chose semblable à une recherche de liste en Python
Modèle d'analyse de données Python
Analyse d'association en Python
Analyse de données avec Python
Analyse de régression avec Python
Analyse des données en Python Résumé des sources que les débutants devraient d'abord consulter
Résumé des outils nécessaires pour analyser les données en Python
Traitement pleine largeur et demi-largeur des données CSV en Python
Créez votre propre Big Data en Python pour validation
[Python] [Word] [python-docx] Analyse simple des données de diff en utilisant python
Liste des bibliothèques Python pour les data scientists et les data ingénieurs
[Python] Manipulation des éléments dans la liste (tableau) [Ajouter / Supprimer]
Ruby, exécution de fragments de code Python de la sélection dans Emacs
Récapitulatif des méthodes Pandas utilisées lors de l'extraction de données [Python]
compréhension de liste car operator.methodcaller ne peut pas être utilisé avec python 2.5
Utilisons les données ouvertes de "Mamebus" en Python
Répertoriez rapidement plusieurs lignes de texte que vous écrivez dans votre code
[Python] Affiche toutes les combinaisons d'éléments de la liste
Regrouper par éléments consécutifs d'une liste en Python
Mon conteneur d'analyse de données python
Gérer les données ambiantes en Python
Liste des outils qui peuvent être utilisés pour essayer facilement l'analyse des émotions des phrases japonaises avec Python (essayez avec google colab)
Résumé des opérations de liste Python3
Python pour l'analyse des données Chapitre 4
Afficher les données UTM-30LX en Python
Analyse statique des programmes Python
Liste des nœuds dans les diagrammes
Jugement d'équivalence d'objet en Python
[Python] Notes sur l'analyse des données
Analyse des contraintes symétriques axiales avec Python
2.x, 3.x code de caractères des séries python
Notes d'apprentissage sur l'analyse des données Python
Extraits de code Python fréquemment utilisés
Générer du code QR en Python