파이썬 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()
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력