@Filipp-S

Поможете с кодом пожалуйста?

Всем привет.
Дали задание, отфильтровать воронку продаж, состоящую из 4-х столбцов (id, page, date, device).
Разделить количество юзеров по странице, дате и девайсу, по девайсу и странице получилось как видно в коде, но вот по дате разделить не получается.
Суть задания - обойтись без библиотек pandas и numpy.

Вот если что ссылка на файл с данными https://drive.google.com/file/d/1zaCTmUst-dOJNvsla...
import csv

funnel_device = {}
funnel_by_month = {} 
funnel_template = {'1_home_page':0, '2_search_page':0, '3_payment_page':0, '4_payment_confirmation_page':0}

with open('click_stream2.csv', mode='r') as csv_file: 
    csv_reader = csv.DictReader(csv_file, fieldnames=['ID','page','date', 'device']) 
    
    
    for row in csv_reader: 

        
            page = list(row.items())[1][1] 
            event_date = list(row.items())[2][1][:-3] 
            device_kind = list(row.items())[3][1]
        
        
            if device_kind not in funnel_device:
                funnel_device[device_kind] = funnel_template.copy()
            if event_date not in funnel_by_month: 
                funnel_by_month[event_date] = funnel_device.copy() 
           

        
            if page == '1_home_page':
                funnel_device[device_kind]['1_home_page'] += 1
            elif page == '2_search_page':
                funnel_device[device_kind]['2_search_page'] += 1
            elif page == '3_payment_page':
                funnel_device[device_kind]['3_payment_page'] += 1
            else:
                funnel_device[device_kind]['4_payment_confirmation_page'] += 1
            
funnel_device


{'Desktop': {'1_home_page': 60200,
  '2_search_page': 30100,
  '3_payment_page': 3010,
  '4_payment_confirmation_page': 150},
 'Mobile': {'1_home_page': 30200,
  '2_search_page': 15100,
  '3_payment_page': 3020,
  '4_payment_confirmation_page': 302}}
​
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
@o5a
Можно так например (или defaultdict вместо использования setdefault)
data = dict()

for row in csv_reader:
    page = row['page']
    event_date = row['date'][:-3]
    device_kind = row['device']

    device_dict = data.setdefault(device_kind, {})
    date_dict = device_dict.setdefault(event_date, {})
    date_dict[page] = date_dict.setdefault(page,0) + 1

print(data)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
csv файл это текстовый файл, где на одну строчку выходит одна строка данных, а колонки разделены запятой (или ; или символ табуляции), строки, содержащие символ-разделитель колонки обрамляются войными или одинарными ковычками, кодировка так же опциональна, формат дат и чисел с плавающей точкой не стандартизирован.

В твоем случае формат простой, на столько, что достаточно читать файл пострчно file.readlines() и делить строку с помощью string.split(символ-разделитель)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы