计算行列表中的值除以嵌套字典中的键

Count values from rowlist divided by key in nested dict

这是一个example dataset

首先,我尝试从行中的值创建一个字典:

import csv
    
who = set()
figure = set()
date = set()
action = []

activity = {'play': 0, 'throw': 0, 'pin': 0, 'tap': 0}


with open(r'ShtrudelT.csv',
         mode = 'r') as csv_file:
    
    lines = csv_file.readlines()
    
    for row in lines:
        
        data = row.split(',')
        
        who.add(data[1])
        figure.add(data[2])
        date.add(data[3][:7])
        action.append(data[4].strip())
        
        xdict = dict.fromkeys(who, 
                dict.fromkeys(figure, 
                dict.fromkeys(date, activity)))

结果是:

{'Googenhaim': {'Circle': {'2020-04': {'play': 0,'throw': 0, 'pin': 0, 'tap': 0},
   '2020-06': {'play': 0, 'throw': 0, 'pin': 0, 'tap': 0},
   '2020-05': {'play': 0, 'throw': 0, 'pin': 0, 'tap': 0}},
  'Rectangle': {'2020-04': {'play': 0, 'throw': 0, 'pin': 0, 'tap': 0}...}

其次,我需要统计按键划分的动作来分析数据。例如,Googenhaim 每月通过任何类型的操作使用 Circle 的次数。

有没有不使用Pandas的解决方案

import csv

count_dict = {}

with open(r'ShtrudelT.csv',
         mode = 'r') as csv_file:
    
    lines = csv_file.readlines()
    
    for row in lines:
        
        data = row.split(',')
        key = data[1] + "_" + data[2] + "_" + data[3][:7] + "_" + data[4].strip()
        if key in count_dict:
            count_dict[key] += 1
        else:
            count_dict[key] = 1

print("\t".join(["Name", "Shape", "Month", "Action", "Count"]))
for element, count in count_dict.items():
    items = element.split("_")
    print("\t".join(items) + "\t" + str(count)) 

我们使用字典,其中每个键都是我们要计算的组合。该组合由用户名、形状、月份和操作组成。在处理每一行时,我们形成键并将其存储在字典中。如果是第一次遇到,则我们将其插入,否则我们将更新计数。

在处理完所有行后,我们可以进行任何类型的post我们想做的处理。 希望能解决问题。