일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬
- play 강좌
- 주키퍼
- 스칼라 동시성
- akka 강좌
- 파이썬 데이터분석
- 스위프트
- play2 강좌
- Akka
- Adapter 패턴
- 스칼라 강좌
- hyperledger fabric
- 파이썬 강좌
- Play2
- 블록체인
- Actor
- 파이썬 동시성
- 플레이프레임워크
- 파이썬 머신러닝
- 그라파나
- 이더리움
- 안드로이드 웹뷰
- 스칼라
- Play2 로 웹 개발
- 하이퍼레저 패브릭
- 하이브리드앱
- Golang
- Hyperledger fabric gossip protocol
- CORDA
- 엔터프라이즈 블록체인
- Today
- Total
HAMA 블로그
심심할때 보는 파이썬 데이터 다루기 본문
다양한 데이터 다루기
0. 다양한 리스트 다루기
# 첫번째 값 리턴
a = [1, 2, 3]
print a[0]
# 마지막값 리턴
print a[-1]
# 리스트안의 리스트에서 값 가져오기
b = [1, 2, 3, ['a', 'b', 'c']]
print b[3][0] # 'a' 리턴
# 리스트 슬라이싱 하기
print b[0:2] # [1,2] 리턴
#리스트 삭제
c = [1, 2, 3, 4, 5, 6, 7]
c.pop(0) # 첫번째 값 삭제
del c[1] # 두번째값 삭제
c.remove(4) # 리스트에서 첫번째로 나오는 4 삭제
c=[] #전체삭제
# 리스트 정렬
d = [1, 9, 3, 2, 5, 14, 7,4]
d.sort()
# 리스트 값 삽입
d.insert(0,4) # 0번째 위치에 4 삽입
# 리스트에서 특정 요소의 갯수 세기
d.count(4) # 리스트에 None 이 없다면 if None not in shaplet:
1. 리스트에서 같은 값의 카운트 세기
import collection.Counter
c = Counter("문재인", "문재인", "안희정", "안희정", "안철수","이재명", "이재명")
c["문재인"] 는 2
2. 리스트에서 특정 값만 솎아내기
a = [1,2,3,4,5] 중에서 홀수만 골라내기
람다식을 이용하면 아래와 같이 됩니다.
filter (lambda x : x % 2 , a)
근데 이것을 List comprehension 으로 표현하면
[x for x in a if x % 2]
3. 두개 리스트의 요소를 곱하기
일반
[a * b for a, b in zip(lista, listb)]
numpy 이용
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([2, 3, 4, 5])
a * b
array([2, 6, 12, 20])
4. 리스트에서 index 와 값을 뽑아내서 순회하기 (enumerate 이용)
[i for i, x in enumerate(testlist) if x == 1]
5. 리스트에서 몇개씩 가져오기 ( 예를들어 48개의 데이터에서 24개씩 가져오기)
def group(iterator, count):
itr = iter(iterator)
while True:
yield [itr.next() for i in range(count)]
for item in group(watts,24):
이렇게 사용하면 watts 라는 리스트에 있는 데이터에서 24개씩 가져온다.
6. reduce 와 operator.add 를 이용해서 합구하기
import operator
def sum(numbers):
return reduce(operator.add, numbers, 0)
7. min 함수의 강력함 ( 데이터를 비슷한 것 끼리 3등분하기)
import random
k = 3
inputs = [1,5,6,50,55,60,100,111,132]
means = random.sample(inputs, k)
def classify_1dim(input):
return min(range(k), key=lambda i: abs(input - means[i]))
new_assignments = map(classify_1dim, inputs)
결과: [0,0,0,1,1,1,2,2,2]
설명 :
map(classify_1dim, inputs) 는 inputs 리스트에서 하나씩 classify_1dim 에 적용시킨다.
min (range(k), key=lambda i : abs(input - means[i])) 은 들어온 input 를 means[0], means[1], means[2] 와 각각의 차를 구한 후에 가장 낮은 숫자에 대한 인덱스를 리턴해준다.
결국 new_assignments 에는 inputs 리스트값들이 가장 가까운 means[0], means[1], means[2] 중 하나로 매핑되어 진다.
시나리오가 있는 데이터 다루기
@ 아래와 같은 주식 데이터가 있다고 하자. / 종가 / 날짜 / 심볼로 이루어져있다.
symbol date closing_price
AAPL 2015-01-23 112.98
AAPL 2015-01-22 112.4
AAPL 2015-01-21 109.55
AAPL 2015-01-20 108.72
AAPL 2015-01-16 105.99
AAPL 2015-01-15 106.82
AAPL 2015-01-14 109.8
..
심볼이 'AAPL' 인 것들 중에서 가장 높은 가격 산출
max_aapl_price = max(row["closing_price"]
for row in data if row["symbol"] == "AAPL")
data 컬렉션에서 값(row) 을 하나 가져와서 심볼이 "AAPL" 인것들 중에서 값이 가장 높은것
심볼별로 데이터 그룹화
from collections import defaultdict # group rows by symbol
by_symbol = defaultdict(list)
for row in data:
by_symbol[row["symbol"]].append(row)
심볼이 같은것 끼리 묶어 줍니다. 즉 { "AAPL" : [ ... , ... ] , "BBPL" : [ ..., ... ] .......} 이런식으로요~
그룹별 가장 높은 가격
max_price_by_symbol = {symbol: max(row["closing_price"] for row in grouped_rows)
for symbol, grouped_rows in by_symbol.iteritems()}
위에서 심볼별 리스트들을 가져와서 각각에 대한 가장 높은 값을 구해줍니다.
결과는 {'AAPL': 119.0, 'FB': 38.23, 'MSFT': 22.78}
특정필드를 리스트로 추출
def picker(field_name):
return lambda row: row[field_name]
def pluck(field_name, rows):
return map(picker(field_name), rows)
picker 는 특정 필드의 값을 리턴해주는 함수를 반환합니다.
pluck 는 rows 들 중 특정 필드의 값 만으로 리스트를 만들어 줍니다.
즉 field_name 에 "closing_price" 를 입력해주면 , 그 값들로만 이루어진 리스트를 리턴함.
데이터를 그룹화시켜서 모으고 , value_transform 공식에 의해서 변경시킨다.
def group_by(grouper, rows, value_transform=None):
grouped = defaultdict(list)
for row in rows:
grouped[grouper(row)].append(row)
if value_transform is None:
return grouped
else:
return {key: value_transform(rows)
for key, rows in grouped.iteritems()}
심볼이라든지 어떤 특정 것을 구분하여 그룹화시키고 , 각 그룹을 value_transform 에 의해 계산합니다.
value_transform 가 그룹의 max 값을 찾는 것이라면 {"AAPL" : 1030 , "BBPL" : 2000 ..} 뭐 이런식으로 결과가 나오겠지요.
'Python' 카테고리의 다른 글
파이선 가상환경 콘다 시작하기 - pip , virtualenv, conda (0) | 2017.04.13 |
---|---|
Numpy, Pandas, SciPy, Scikit-learn, Matplotlib 정리 (0) | 2017.04.12 |
데이터 분석에 피가 되는 itertools 익히기 (0) | 2017.04.12 |
중급 파이썬 레퍼런스 (0) | 2017.02.07 |
파이썬 시간 함수 (time, datetime) 예제 (0) | 2016.11.10 |