2016-11-11 100 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到任何現有的密鑰。

相關問題