Как выполнять операции с файлом CSV без использования Pandas? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть CSV-файл, который содержит customer_id,order_id,number_of_items. Мне нужно придумать программу, чтобы найти среднее количество товаров, приобретенных на одного клиента, и уникальное количество customer_ids, поскольку есть дубликаты. Как бы я подошел к этой задаче? Я также не понимаю, какую структуру данных мне следует использовать для этого или как я вообще это делаю. Я могу написать это на Python или Java. Это просто опыт обучения для меня. Я легко могу сделать это, это Панды, но я хочу создать простую программу, которая делает это.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Вот один в awk (в симпатичной печати, для вашего удовольствия):

$ awk '
BEGIN {                                        # before anything
    FS=OFS=","                                 # set the field separators
}
NR>1 {                                         # skip header line, process others
    c[$1]++                                    # count the times a customer_id seen
    n[$1]+=$3                                  # total number of items purchased
}
END {                                          # after processing all transactions
    print "customer_id","avg_no_items"         # print header
    for(i in c) {                              # loop customer_ids in random order
        print i,n[i]/c[i]                      # compute avg and print
        u++                                    # count uniq customer_ids in c
    }
    print "Number of unique customer_ids: " u  # in GNU awk use length(c) and lose u
}' file

Вывод:

customer_id,avg_no_items
1,63.5
2,56
3,84
Number of unique customer_ids: 3

Здесь в обещанной однострочной форме:

$ awk 'BEGIN{FS=OFS=","}NR>1{c[$1]++;n[$1]+=$3}END{print "customer_id","avg_no_items";for(i in c){print i,n[i]/c[i];u++}print "Number of unique customer_ids: " u}' file
0 голосов
/ 08 ноября 2019

Используйте CSV-анализатор для чтения файла, используйте Set для сбора отдельных значений customer_id и подсчета общего количества элементов.

Псевдокод

Set<String> customerIds = new HashSet
int itemCount = 0
CSVParser parser = new CSVParser(file)
for (Row row : parser) {
    customerIds.add(row.getString(0/*customer_id*/))
    itemCount += row.getInt(2/*number_of_items*/)
}
int customerCount = customerIds.size()
print("Average number of items purchased per customer: " + (double) itemCount / customerCount)
print("Unique number of customer_ids: " + customerCount)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...