2016-11-11 124 views
-1

我必须编写一个Python应用程序来读取CSV输入文件(appsUsage.csv),并生成一个输出文件,统计每个用户的应用使用频率。输入文件的第一列包含用户标识(user_id),第二列包含应用程序的名称(app_name)。从appsUsage.csv中,我必须计算每个用户的应用程序使用频率以生成app_Rank,并转换为名为appsIndividualUsage.csv的新数据集,其中包含以下列:user_id; APP_NAME; app_Rank。提取数据csv文件并写入python中的另一个文件

例如,如果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

如何解析来自'appsUsage.csv'的数据首先存储所需的数据,然后创建'appsIndividualUsage.csv'并一次写入数据。 – Swanand

回答

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到任何现有的密钥。

相关问题