Лучшее простое и эффективное решение для организации данных - PullRequest
0 голосов
/ 30 апреля 2020

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

Упражнение: Учитывая список идентификаторов клиентов, я должен сегментировать их по следующие логики c:

  • Если ID кратен 7 и кратен 3, то сегмент 'A'
  • Если ID кратен 3, то сегмент 'B'
  • Если ID кратен 7, то сегмент 'C'
  • Остальное, сегмент 'D'

Что я сделал:

from collections import Counter
from datetime import datetime
import os.path
import json

date = datetime.today().strftime('%Y-%m-%d')

customer_indices = [list of IDs] ex: [123981,12398,123157,12371...]


def segment(customer):
    if customer % 7 == 0 & customer % 3 == 0:
        return 'A'
    elif customer % 7 == 0:
        return 'B'
    elif customer % 3 == 0:
        return 'C'
    else:
        return 'D'


def split_customers(customers):
    a = []
    b = []
    c = []
    d = []

    for customer in customers:
        if customer % 7 == 0 & customer % 3 == 0:
            a.append(customer)
        elif customer % 7 == 0:
            b.append(customer)
        elif customer % 3 == 0:
            c.append(customer)
        else:
            d.append(customer)
    return a,b,c,d

segmentation = [segment(customer) for customer in customer_indices]

print('Segmentation list: ')
print(segmentation)
print('\n')


segmentation_counter = Counter(segmentation)

print('Count of clients per segment: ')
print(f"A: {segmentation_counter['A']}")
print(f"B: {segmentation_counter['B']}")
print(f"C: {segmentation_counter['C']}")
print(f"D: {segmentation_counter['D']}")


a, b, c, d = split_customers(customer_indices)


main_dict = {'Date': date,
             'Segmentation': {
                 'A Clients': {
                     'Count': segmentation_counter['A'],
                     'Customers': a},
                 'B Clients': {
                     'Count': segmentation_counter['B'],
                     'Customers': b},
                 'C Clients': {
                     'Count': segmentation_counter['C'],
                     'Customers': c},
                 'D Clients': {
                     'Count': segmentation_counter['D'],
                     'Customers': d}}}


main_list = [main_dict]

if not os.path.exists('Data/customer_segmentation.json'):
    os.makedirs('Data')

if os.path.isfile('Data/customer_segmentation.json'):
    with open('Data/customer_segmentation.json') as file:
        data = json.load(file)
        file.close()

    data.append(main_dict)
    with open('Data/customer_segmentation.json', 'w') as file:
        json.dump(data, file, indent=2)
        file.close()

else:
    file = open('Data/customer_segmentation.json', 'w')
    json.dump(main_list, file, indent=2)
    file.close()

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

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

Что ты думаешь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...