파이썬 csv파일을 읽어서 계산할때 질문좀 드릴게요.

조회수 2350회

지금 csv 파일에서 파일을 읽어들여서 여러가지 계산을 한후 다른 csv파일에 옮겨적는

프로그램을 작성중인데, 리스트의 요소 갯수가 몇개인지 정해지지 않았을때는

어떻게 알고리듬을 짜야할지 모르겠어서 이렇게 질문 올려드립니다.

일단 모듈을 쓰지않고 쓰고있습니다. 밑에 짠 알고리듬은 리스트속 요소가 4개만 일때 쓴 식입니다

때문에 4개보다 적거나 많을때는 프로그램이 돌아가지 않습니다.

infilename = input("Enter the location of your input file : ")
outfilename = input("Enter the location of your output file : ")

infile = open(infilename, "r")
outfile = open(outfilename, "w")

outfile.write("Column,Sum,Mean,STD,Median,Mode,Min,Max\n")

column = 0

for line in infile:
    if line:
        column += 1
        infileline = line.rstrip().split(",")
        infileline.sort()
        total = float(infileline[0]) + float(infileline[1]) + float(infileline[2]) + float(infileline[3])
        mean = total / 4
        std =  ((float(infileline[0])**2 + float(infileline[1])**2 + float(infileline[2])**2 + float(infileline[3])**2) / 4) - mean**2
        median = (float(infileline[1]) + float(infileline[2])) / 2
        mode = 2
        minimum = float(infileline[0])
        maximum = float(infileline[3])

        outfile.write(str(column)+',')
        outfile.write(','.join("%1.0f"%i for i in (total, mean, std, median,mode, minimum, maximum)))
        outfile.write('\n')

infile.close()
outfile.close()

추가로 혹시나 최빈값 (리스트에서 가장 많이 등장하는 숫자) ==mode 를 어떻게 디파인 해야할지 도 알려주시면 너무 감사할것 같습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • numpy나 counter를 사용하면 쉽게 코딩할 수 있습니다. 아래 코드를 참고해보세요.

    import numpy as np
    from collections import Counter
    
    infilename = "in.csv"
    outfilename = "out.csv"
    
    infile = open(infilename, "r")
    outfile = open(outfilename, "w")
    
    outfile.write("Column,Sum,Mean,STD,Median,Mode,Min,Max\n")
    
    column = 0
    
    for line in infile:
        if line:
            column += 1
    
            # infileline의 원소를 전부 float 형으로 바꿔줌
            infileline = [float(i) for i in line.rstrip().split(",")]
    
            # sum
            total = sum(infileline)
    
            # average
            mean = total / len(infileline)
    
            # standard deviation
            std = sum([i**2 for i in infileline])/len(infileline) - mean**2
    
            # medin: numpy 모듈 사용
            median = np.median(infileline)
    
            # 최빈값: Counter 모듈 사용. 최빈값이 1개만 있다고 가정
            most_common = Counter(infileline).most_common()[0][0]
    
            mode = 2
            minimum = min(infileline)
            maximum = max(infileline)
    
            outfile.write(str(column)+',')
            outfile.write(','.join("%1.0f"%i for i in (total, mean, std, median,mode, minimum, maximum)))
            outfile.write('\n')
    
    infile.close()
    outfile.close()
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)