2013-02-25 2 views
0

개인 프로젝트의 경우, 상당히 큰 .CSV 파일에 Apple의 과거 주식 데이터가 있습니다. 내가 지금 찾고 무엇CSV 파일에서 튜플 목록 평균화하기

('2012-03-24' , '122.10') 

: 이미이 데이터를 읽고 날짜와 달의 종가 인쇄하는 CSV 모듈을 사용하는 기능을 가지고 : 여기

은 튜플의 형식의 예 매달 데이터를 평균화하고 튜플 목록을 재생성합니다.

누구에게 의견이 있습니까? 저는 처음 파이썬 학생입니다.

def get_list_data(file_obj, column_number):  
    with open("table.csv", "r") as f: 
     reader = csv.reader(f, delimiter=',') 
     for row in reader: 
      data = row[0] , row[column_number] #Data and column data 
      list_of_tuples = tuple(data) 
      print(list_of_tuples) 

    return list_of_tuples 

def average_data(list_of_tuples): #This is where I am stuck 
+2

우리 스택 오버플로! 우리가 당신을 위해 몇 가지 코드를 작성하기를 원하는 것처럼 보입니다. 대부분의 사용자는 곤경에 처한 코더 코드를 기꺼이 만들지 만 일반적으로 포스터가 이미 문제를 해결하려고 시도했을 때만 도움이됩니다. 이러한 노력을 입증하는 좋은 방법은 지금까지 작성한 코드, 예제 입력 (있는 경우), 예상 출력 및 실제로 얻은 출력 (콘솔 출력, 스택 추적, 컴파일러 오류 등)을 포함시키는 것입니다. 응용할 수 있는). 더 자세하게 제공할수록 더 많은 답변을받을 수 있습니다. –

+0

사과, 내가 지금까지 가지고있는 것을 게시 할 것이다. –

+3

시계열을 빠르고 효율적으로 집계하려면 [pandas] (http://pandas.pydata.org/pandas-docs/stable/timeseries.html) 라이브러리를 살펴 보는 것이 좋습니다. – Trevor

답변

1

는 다음 단계가 필요합니다

  1. 먼저 각 튜플 ('122.1')를 float로의 두 번째 부분에서 문자열을 변환해야합니다. float() 방법으로이 작업을 수행 할 수 있습니다.

  2. 둘째, sum() 메서드와 list comprehension 메서드를 사용하여 튜플의 모든 두 번째 부분의 합계를 계산해야합니다.

  3. 함수가 len() 인 목록의 길이로 나눕니다.

코드 예제 :

def average_data(list_of_tuples): 

    stock_data = [float(t[1]) for t in list_of_tuples] 
    stock_sum = sum(stock_data) 
    return stock_sum/len(list_of_tuples) 

예 : 자신에게 파이썬을 가르치는 경우

list_of_tuples = [('2012-03-24' , '122.10'), ('2012-03-25' , '117.30'), ('2012-03-26' , '126.9')] 

print average_data(list_of_tuples) 
>>> 122.1 
+0

수 자나, 정말 고맙습니다. 고마워요! –

1

, 가서 csv하여 자신의 독자를 구현하고 평균 계산을 직접 해결 . 그것은 훌륭한 운동입니다.

그러나, 당신은 더 적은 코딩을하고 분석에 더 많은 시간을 보내고, pandas (또는 적어도 numpy) 같은 뭔가를 사용하려는 경우. pandas 라이브러리는 이러한 유형의 데이터 분석에 뛰어납니다.

다음 ipython 세션은 이러한 유형의 계산이 pandas과 얼마나 쉬운 지 보여줍니다. (ipython을 사용하지 않는다면 다른 도구가됩니다.) 이 강의에서는 Apple 주식 데이터가 포함 된 CSV 파일을 읽었습니다. 데이터 파일 'aapl.CSV는 '다음과 같습니다

Date,Open,High,Low,Close,Volume,Adj Close 
2013-02-25,453.85,455.12,442.57,442.80,13276100,442.80 
2013-02-22,449.25,451.60,446.60,450.81,11798600,450.81 
2013-02-21,446.00,449.17,442.82,446.06,15970800,446.06 
2013-02-20,457.69,457.69,448.80,448.85,17010800,448.85 
2013-02-19,461.10,462.73,453.85,459.99,15563700,459.99 
2013-02-15,468.85,470.16,459.92,460.16,13990900,460.16 
2013-02-14,464.52,471.64,464.02,466.59,12688400,466.59 
... 
1984-09-14,27.62,28.50,27.62,27.87,8826400,3.13 
1984-09-13,27.50,27.62,27.50,27.50,7429600,3.09 
1984-09-12,26.87,27.00,26.12,26.12,4773600,2.94 
1984-09-11,26.62,27.37,26.62,26.87,5444000,3.02 
1984-09-10,26.50,26.62,25.87,26.37,2346400,2.97 
1984-09-07,26.50,26.87,26.25,26.50,2981600,2.98 

가져 오기 팬더 라이브러리 :

In [1]: import pandas as pd 

를 사용하여 DataFrame에 데이터를 읽기'

In [2]: aapl = pd.read_csv('aapl.csv', index_col=0, parse_dates=True) 

정렬 인덱스로 날짜 '열을 오름차순으로 색인 :

In [3]: aapl = aapl.sort() 

처음 몇 레코드를 살펴보십시오.

In [4]: aapl.head() 
Out[4]: 
      Open High Low Close Volume Adj Close 
Date              
1984-09-07 26.50 26.87 26.25 26.50 2981600  2.98 
1984-09-10 26.50 26.62 25.87 26.37 2346400  2.97 
1984-09-11 26.62 27.37 26.62 26.87 5444000  3.02 
1984-09-12 26.87 27.00 26.12 26.12 4773600  2.94 
1984-09-13 27.50 27.62 27.50 27.50 7429600  3.09 

데이터를 월 단위로 다시 샘플링하십시오. 기본적으로 매일 값의 평균이 사용됩니다

In [5]: monthly = aapl.resample('1M') 

In [6]: monthly.head() 
Out[6]: 
       Open  High  Low  Close   Volume Adj Close 
Date                    
1984-09-30 26.981250 27.333125 26.606250 26.738750 4807300.000000 3.007500 
1984-10-31 25.035652 25.313478 24.780435 24.806957 5559408.695652 2.788696 
1984-11-30 24.545238 24.782857 24.188095 24.236190 5749561.904762 2.724286 
1984-12-31 27.060000 27.378500 26.841000 26.947500 6195360.000000 3.031500 
1985-01-31 29.520000 29.855909 29.140000 29.253182 10353818.181818 3.289091 

플롯 월별 데이터의 '닫기'열 :

:

In [7]: monthly.plot(y='Close') 
Out[7]: <matplotlib.axes.AxesSubplot at 0x45ff4d0> 

는 '닫기'열에서보세요 여기

In [8]: monthly['Close'] 
Out[8]: 
Date 
1984-09-30 26.738750 
1984-10-31 24.806957 
1984-11-30 24.236190 
1984-12-31 26.947500 
1985-01-31 29.253182 
1985-02-28 28.089474 
1985-03-31 22.741429 
1985-04-30 21.425238 
1985-05-31 19.656818 
1985-06-30 16.399000 
1985-07-31 17.185455 
1985-08-31 15.098636 
1985-09-30 15.738500 
1985-10-31 16.940000 
1985-11-30 19.460000 
... 
2011-12-31 392.930476 
2012-01-31 428.578000 
2012-02-29 497.571000 
2012-03-31 577.507727 
2012-04-30 606.003000 
2012-05-31 564.673182 
2012-06-30 574.562381 
2012-07-31 601.068095 
2012-08-31 642.696087 
2012-09-30 681.568421 
2012-10-31 634.714286 
2012-11-30 564.345714 
2012-12-31 532.055000 
2013-01-31 497.822381 
2013-02-28 459.026875 
Freq: M, Name: Close, Length: 342 
plot 방법에 의해 생성 된 줄거리입니다 : Monthly average of 'Close'

+0

고마워, 워렌! 나는이 프로젝트가 끝난 후에 당신의 제안을 시도해 볼 것이라고 생각합니다. –