Как вызвать конкретный c класс и метод для другого python файла в python 3? - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь вызвать класс и метод в другой файл python. Но когда я вызываю класс в другой файл python, он вызывает всю программу python, связанную с этим файлом .py.

Это мой python файл, имеющий другой класс и методы. file_reader.py помогает читать набор данных.

data_processing.py

from sklearn.preprocessing import StandardScaler

from filereader import read_data
from configuration import DATASET_PATH

data = read_data(DATASET_PATH)
scaler = StandardScaler()
'''Normalizing column and time columns to normalizedho_amount and normalized_time'''
class NormalizedColumns:

    data['normalized_amount'] = scaler.fit_transform(data['Amount'].values.reshape(-1, 1))
    data['normalized_time'] = scaler.fit_transform(data['Time'].values.reshape(-1, 1))

    print("=" * 40, "Describing normalized_amount columns ", "=" * 40)
    print(data.normalized_amount.describe())

    print("=" * 40, "Describing normalized_time columns ", "=" * 40)
    print(data.normalized_time.describe())

    '''Droping amount and time column from original dataset'''
    data = data.drop(['Time', 'Amount'], axis=1)
    print(data.head())


'''Separting features and lables'''

class NormalizedFeatures:
    def first_xdata(self):
        xData = data.iloc[:, data.columns != 'Class']  # feature
        return xData

features = NormalizedFeatures()
print(features.first_xdata().head(5))
print('Rows and columns of your new normalized dataset is :', features.first_xdata().shape)
print(features.first_xdata().columns)

print('\n')


class NormalizedLabels:
    def second_ydata(self):
        yData = data.iloc[:, data.columns == 'Class']  # lables
        return yData

labels = NormalizedLabels()

print(labels.second_ydata().head(5))
print('Rows and columns of your new normalized dataset is :', labels.second_ydata().shape)
print(labels.second_ydata().columns)

Я хочу вызвать класс NormalizedFeatures и NormalizedLabels в этом файле python. Но этот файл будет вызывать весь файл dataprocssing.py, включая oversampling.py

oversampling.py

from imblearn.over_sampling import SMOTE

from filereader import read_data
from configuration import DATASET_PATH

from data_processing import features , labels

data = read_data(DATASET_PATH)

sm = SMOTE(random_state= 42)
x_Sampled,y_Sampled = sm.fit_sample(features.first_xdata(),labels.second_ydata().values.ravel())

Source_data_no_fraud_count = len(data[data.Class==0])
Source_data_fraud_count = len(data[data.Class==1])
print('Percentage of fraud counts in original data :{}%'.format((Source_data_fraud_count*100)/(Source_data_no_fraud_count+Source_data_fraud_count)))

Sampled_data_no_fraud_count = len(y_Sampled[y_Sampled==0])
Sampled_data_fraud_count = len(y_Sampled[y_Sampled==1])
print('Percentage of fraud counts in the new data  :{}%'.format((Sampled_data_fraud_count*100)/(Sampled_data_no_fraud_count+Sampled_data_fraud_count)))

Исключенный вывод

Percentage of fraud counts in original data:0.1727485630620034%
Percentage of fraud counts in the new data:50.0%

Ответы [ 2 ]

1 голос
/ 23 января 2020

Вещи в data_proccessing.py, которые вы не хотите выполнять при импорте, должны быть защищены оператором if __name__ == '__main__'. Например:

from sklearn.preprocessing import StandardScaler

from filereader import read_data
from configuration import DATASET_PATH

data = read_data(DATASET_PATH)
scaler = StandardScaler()

'''Normalizing column and time columns to normalizedho_amount and normalized_time'''
class NormalizedColumns:

    data['normalized_amount'] = scaler.fit_transform(data['Amount'].values.reshape(-1, 1))
    data['normalized_time'] = scaler.fit_transform(data['Time'].values.reshape(-1, 1))

    print("=" * 40, "Describing normalized_amount columns ", "=" * 40)
    print(data.normalized_amount.describe())

    print("=" * 40, "Describing normalized_time columns ", "=" * 40)
    print(data.normalized_time.describe())

    '''Droping amount and time column from original dataset'''
    data = data.drop(['Time', 'Amount'], axis=1)
    print(data.head())


'''Separting features and lables'''

class NormalizedFeatures:
    def first_xdata(self):
        xData = data.iloc[:, data.columns != 'Class']  # feature
        return xData

if __name__ == '__main__':
    features = NormalizedFeatures()
    print(features.first_xdata().head(5))
    print('Rows and columns of your new normalized dataset is :', features.first_xdata().shape)
    print(features.first_xdata().columns)

Это никак не влияет на операторы print непосредственно в теле NormalizedColumns, но их, вероятно, не должно быть вообще. Как правило, единственное, что вам нужно на верхнем уровне оператора class, - это определения.

0 голосов
/ 23 января 2020

, если у вас есть что-то вроде

import a

и a.py записывается как

def sum(x1, x2):
    return x1 + x2
#
a = 2; b = 3;
sum(a, b)

при импорте этого модуля будут также запускаться строки после #

тогда лучшее, что вы можете сделать, это записать тот же файл, что и

def sum(x1, x2):
    return x1 + x2

if __name__ == '__main__':
    a = 2; b = 3;
    sum(a, b)

, это означает, что вещи, следующие после if, будут выполняться только при выполнении a.py, а не при импорте модуля.

...