3 совета Python по чтению, созданию и запуску нескольких файлов

машинное обучение глубокое обучение компьютерное зрение NLP

Автор|Хуен Тран Компилировать|ВКонтакте Источник | К науке о данных

мотивация

При вводе вашего кода в производство вам, скорее всего, придется иметь дело с организацией ваших файлов кода. Чтение, создание и запуск большого количества файлов данных отнимает много времени. Эта статья покажет вам, как автоматически

  • Перебирать файлы в каталоге

  • Если вложенных файлов нет, создайте их

  • Запустите файл с другим вводом, используя цикл bash for

Эти советы сэкономили мне много времени в проектах по науке о данных. Надеюсь, вы тоже найдете их полезными!

Перебирать файлы в каталоге

Если бы мы читали и обрабатывали несколько данных следующим образом:

├── data
│   ├── data1.csv
│   ├── data2.csv
│   └── data3.csv
└── main.py

Мы можем попробовать вручную читать по одному файлу за раз

import pandas as pd 

def process_data(df):
   pass

df = pd.read_csv(data1.csv)
process_data(df)

df2 = pd.read_csv(data2.csv)
process_data(df2)

df3 = pd.read_csv(data3.csv)
process_data(df3)

Это нормально, но неэффективно, когда у нас более 3 данных. Если мы изменили только данные в приведенном выше скрипте, почему бы не использовать цикл for для доступа к каждому из данных?

Следующий скрипт позволяет нам перебирать файлы в указанном каталоге.

import os
import pandas as pd
def loop_directory(directory: str):
	'''循环目录中的文件'''

	for filename in os.listdir(directory):
		if filename.endswith(".csv"):
			file_directory = os.path.join(directory, filename)
			print(file_directory)
			pd.read_csv(file_directory)
		else:
			continue
			
if __name__=='__main__':
	loop_directory('data/')
data/data3.csv
data/data2.csv
data/data1.csv

Вот объяснение приведенного выше скрипта

  • for filename in os.listdir(directory): прокручивать файлы в определенном каталоге
  • if filename.endswith(".csv"): доступ к файлам, оканчивающимся на ".csv"
  • file_directory = os.path.join(directory, filename): объединяет родительский каталог («данные») и файлы в каталоге.

Теперь мы можем получить доступ ко всем файлам в каталоге «data»!

Если вложенных файлов нет, создайте их

Иногда нам может понадобиться создать вложенные файлы для организации кода или моделей, что облегчит их поиск в будущем. Например, мы можем использовать «модель 1», чтобы указать конкретную разработку функций.

При использовании модели 1 нам может потребоваться использовать другой тип модели машинного обучения для обучения наших данных («model1/XGBoost»).

При работе с каждой моделью машинного обучения мы можем даже захотеть сохранить разные версии модели, потому что модели используют разные гиперпараметры.

Таким образом, наш каталог моделей выглядит таким же сложным, как показано ниже.

model
├── model1
│   ├── NaiveBayes
│   └── XGBoost
│       ├── version_1
│       └── version_2
└── model2
    ├── NaiveBayes
    └── XGBoost
        ├── version_1
        └── version_2

Создание вложенного файла вручную может занять много времени для каждой модели, которую мы создаем. Есть ли способ автоматизировать этот процесс? Да,os.makedirs(datapath).

def create_path_if_not_exists(datapath):
    '''如果不存在,则创建新文件并保存数据'''

    if not os.path.exists(datapath):
        os.makedirs(datapath) 
        
if __name__=='__main__':
create_path_if_not_exists('model/model1/XGBoost/version_1')

Запустите указанный выше файл, и вы должны увидеть вложенный файл «model/model2/XGBoost/version_2», созданный автоматически!

Теперь вы можете сохранить свою модель или данные в новый каталог!

import joblib
import os 

def create_path_if_not_exists(datapath):
    '''如果不存在就创建'''

    if not os.path.exists(datapath):
        os.makedirs(datapath) 

if __name__=='__main__':

  # 创建目录
  model_path = 'model/model2/XGBoost/version_2'
  create_path_if_not_exists(model_path)
  
  # 保存
  joblib.dump(model, model_path)

Bash for Loop: запустить файл с разными аргументами

Что, если мы хотим запустить файл с другими параметрами? Например, мы можем захотеть использовать один и тот же сценарий для прогнозирования данных с использованием разных моделей.

import joblib

# df = ...

model_path = 'model/model1/XGBoost/version_1'
model = joblib.load(model_path)
model.predict(df)

Если выполнение сценария занимает много времени, и у нас есть несколько моделей для запуска, потребуется много времени, чтобы дождаться завершения выполнения сценария, а затем запустить следующий. Есть ли способ заставить компьютер запускать 1, 2, 3, 10 с помощью одной командной строки, а затем делать все остальное.

Да, мы можем использовать bash для цикла. Во-первых, мы используем системный argv, чтобы позволить нам анализировать аргументы командной строки. Вы также можете использовать такие инструменты, как гидра, если хотите переопределить файлы конфигурации в командной строке.

import sys
import joblib

# df = ...

model_type = sys.argv[1]
model_version = sys.argv[2]
model_path = f'''model/model1/{model_type}/version_{model_version}'''
print('Loading model from', model_path, 'for training')

model = joblib.load(model_path)
mode.predict(df)
>>> python train.py XGBoost 1
Loading model from model/model1/XGBoost/version_1 for training

Очень хороший! Мы только что сказали нашему сценарию использовать модель XGBoost версии 1 для прогнозирования данных в командной строке. Теперь мы можем просмотреть различные версии модели с помощью bash.

Если вы можете выполнить цикл for с помощью Python, то также на терминале, как показано ниже.

$ for version in 2 3 4
> do
> python train.py XGBoost $version
> done

Введите Enter для разделения строк

вывод:

Loading model from model/model1/XGBoost/version_1 for training
Loading model from model/model1/XGBoost/version_2 for training
Loading model from model/model1/XGBoost/version_3 for training
Loading model from model/model1/XGBoost/version_4 for training

Теперь вы можете заниматься другими делами во время работы скриптов с разными моделями! Как удобно!

в заключении

поздравляю! Вы только что узнали, как автоматически читать и создавать несколько файлов одновременно. Вы также узнали, как запустить файл с различными параметрами. Время ручного чтения, записи и запуска файлов теперь можно сэкономить для более важных задач.

Если вы не уверены в некоторых частях статьи, я создал конкретные примеры в этом репозитории:GitHub.com/Customers также могут быть спокойны 1…

Оригинальная ссылка:в сторону data science.com/3-Python-внезапно…

Добро пожаловать на сайт блога Panchuang AI:panchuang.net/

sklearn машинное обучение китайские официальные документы:sklearn123.com/

Добро пожаловать на станцию ​​сводки ресурсов блога Panchuang:docs.panchuang.net/