Pandas Модульное тестирование - PullRequest
2 голосов
/ 26 апреля 2020

Я написал простой скрипт Pricing Service. Я хочу написать сейчас модульные тесты для него. Как бы ты предложил мне это сделать? Должен ли я проверить вывод только каждой функции или что-то еще? Я читал о модульных тестах, но не уверен, как правильно их реализовать в своем скрипте. Буду благодарен за все советы!

Ниже Вы можете найти мой код. Я знаю, что это грязно и имеет плохую сложность, но на данный момент достаточно (я буду менять многие вещи в будущем, как заменить iterrows () et c.)

import pandas as pd


def read_data():
    data = pd.read_csv("data.csv")
    matchings = pd.read_csv("matchings.csv")
    currencies = pd.read_csv("currencies.csv")

    return data,matchings,currencies

def write_data(filtered_data):
    filtered_data.to_csv('top_products.csv',index=False)

def conversion(data,curriencies):
    for index,row in data.iterrows():
        if row['currency'] ==  'GBP':
            data['price'][index] = row['price'] * curriencies['ratio'].loc[
                curriencies['currency'] =='GBP']
            data['currency'].loc[index] ='PLN'
            data['total_price'] = data['price'] * data['quantity']
        elif row['currency'] == 'EU':
            data['price'][index] = row['price'] * curriencies['ratio'].loc[
                curriencies['currency'] == 'EU']
            data['currency'].loc[index] ='PLN'
            data['total_price'] = data['price'] * data['quantity']
        elif row['currency'] == 'PLN':
            data['total_price'] = data['price'] * data['quantity']

    return data

def filter(data,matchings):
    data = data.sort_values(by=['matching_id','total_price'],ascending=False)
    data_copy = data.copy()
    filtered_data = pd.DataFrame(columns=['ignored_products_count'])

    for index,row in matchings.iterrows():
        data[data['matching_id'] == row['matching_id']] = data[
             data['matching_id']==row['matching_id']].iloc[
             0:row['top_priced_count']]

    filtered_data = filtered_data.reset_index(drop=True)
    filtered_data['total_price'] = data.groupby('matching_id')[
        'total_price'].sum()
    filtered_data['avg_price'] = data.groupby(['matching_id'])[
        'total_price'].mean()
    filtered_data['currency'] = data['currency']
    data = data.dropna()
    filtered_data['matching_id'] = filtered_data.index

    for index,row in filtered_data.iterrows():
        filtered_data['ignored_products_count'].loc[index] = len(data_copy[
                     data_copy['matching_id'] == row['matching_id']]) - len(
                     data[data['matching_id'] == row['matching_id']])

    filtered_data = filtered_data.reset_index(drop=True)
    filtered_data = filtered_data[['matching_id','total_price','avg_price',
                                   'currency','ignored_products_count']]
    print(filtered_data)

    return filtered_data

if __name__ == "__main__":

    data,matchings,currencies = read_data()
    converted_data = conversion(data,currencies)
    filtered_data = filter(converted_data,matchings)
    write_data(filtered_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...