我必须编写一个Python应用程序来读取CSV输入文件(appsUsage.csv)并生成一个输出文件,计算每个用户的应用程序使用频率。输入文件的第一列包含用户标识(user_id),第二列包含应用程序的名称(app_name)。在appsUsage.csv中,我必须根据个人用户计算应用程序使用频率以生成app_Rank,并使用以下列转换为名为appsIndividualUsage.csv的新数据集:user_id; APP_NAME; app_Rank。
例如,如果appsUsage.csv有以下事件
a facebook
a facebook
a linkedin
b google
b yahoo
b yahoo
然后appsIndividualUsage.csv将是:
a facebook 2;
a linkedin 1;
b google 1;
b yahoo 2;
这是我正在努力解决的代码:
import csv
with open("C:\\Users\\anne\\Desktop\\appsUsage.csv", mode='r') as f_in,
open("C:\\Users\\anne\\Desktop\\appsIndividualUsage.csv", mode='w', newline='')
as f_out:
f_reader = csv.reader(f_in, dialect=csv.excel_tab)
f_writer = csv.writer(f_out, dialect=csv.excel_tab)
for line in reader:
if line is equal then write it in writer and add a row of frequency
我完全不知道如何编写代码的最后一行。
答案 0 :(得分:0)
Python为此提供了Counter()
。它是一个像对象的字典,可以用来计算添加到它的键。在这种情况下,字典的键是用户名和应用程序的组合。
首先读取输入CSV文件中的所有条目并计算它们。然后将排序后的计数写入输出CSV文件,如下所示:
from collections import Counter
import csv
usage_counts = Counter()
with open('appsUsage.csv') as f_in:
f_reader = csv.reader(f_in, dialect=csv.excel_tab)
for user, application in f_reader:
usage_counts[(user, application)] += 1
with open("appsIndividualUsage.csv", mode='w', newline='') as f_out:
f_writer = csv.writer(f_out, dialect=csv.excel_tab)
for (user, application), count in sorted(usage_counts.items(), key=lambda x: (x[0], x[1])):
f_writer.writerow([user, application, count])
这会给你一个CSV文件,如下所示:
a facebook 2
a linkedin 1
b google 1
b yahoo 2
如果您不允许使用Counter()
,则需要使用普通字典,并将1添加到任何现有密钥。