일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 정처기
- linux
- 십새
- 인간관계론
- hanspell
- PER
- DevOps
- 퀴팅의기술
- 티스토리챌린지
- 주식 콜옵션
- 유튜브 기초강의
- pepe the frog
- 노베이스 정처기
- 노베이스 정처기 공부법
- 이클립스
- docker
- PEPE
- 슬픈 개구리
- 유튜브
- 페페
- 도커
- PBR
- 정보처리기사
- 가장빨리부자되는법
- 고맙다트럼프
- 노베이스 정보처리기사 합격법
- 유튜브 성공하는법
- 나스닥 개폭락
- 오블완
- 퀴팅
Archives
- Today
- Total
실패는 성공을 위한 밑거름
파이선코드 이해가안가서 풀이한것 (개인풀이) 본문
파이선코드 이해가안가서 풀이한것 (개인풀이)
df_all[f'scipy_data_{window}'] = df_all[f'scipy_{window}'].rolling(window=10).apply(lambda x: np.polyfit(np.arange(len(x)), x, 1)[0], raw=False) * 100
-------------------
rolling(window=10) (+ mean())
rolling의 의미 :
처음부터 배열끝까지 window개까지 데이터를 묶겠다는뜻
그래서 배열앞의 window개까지는 값이 없어진다.
[1-window(=10)(없는값),2-x(없는값), 3-x(없는값),,,, (1~10원소들의 평균값), (2~11원소들의 평균값), (3~12원소들의 평균값),,,,]
그리고 이거는 바로 값이 나오지않는다.
평균값을 가져오려면 mean()을 사용하고 사용자 정의함수를 사용하려면 apply를 사용한다.
-----------------------
apply()
x_array.apply 이전의 값(x_array)들을 람다식으로 넘기겠다는것
------------------------
lambda x
item.apply(lambda x : method)
item을 x로 매개변수삼아서 method로 처리하겠다는 뜻
-------------------
np.arange()
위에 apply보면 그전에 아이템이 배열이고 배열을 x로 치환해서 람다식으로 보이는가?
len(x)는 배열의 길이를 반환하는거고 배열길이만큼 순번을 만들어준다.
만약 x가 10길이의 배열이라면
ex) x = [100, 102, 101, 104, 107, 110, 109, 112, 115, 118]
return np.arange(len(x)) -> return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-------------------------
np.polyfit(np.arange(len(x)), x, 1)
np.polyfit(시간, 가격, 1)을 통해 **가격이 시간에 따라 얼마나 증가 또는 감소하는지(기울기)**를 계산하는 거야.
np.polyfit([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [100, 102, 101, 104, 107, 110, 109, 112, 115, 118], 1)
y = ax + b에서 기울기 a를 구하는 과정이야.
출력 예시: [1.8, 100.5]
1.8 → 기울기 (stock price 증가 속도)
100.5 → y절편 (시간=0일 때 예상 가격, 무시 가능)
메서드를 다시 풀면
df_all[f'scipy_data_{window}'] = df_all[f'scipy_{window}'].rolling(window=10).apply(lambda x: np.polyfit(np.arange(len(x)), x, 1)[0], raw=False) * 100
# 10개씩 묶어서
item1_1 = easy_code(df_all[f'scipy_{window}'])
def easy_code(item):
smooth_prices = item
# 기울기(변화율) 값을 저장할 리스트
slopes = []
# 윈도우 크기 설정 (10개씩 묶어서 계산)
window_size = 10
# 데이터 길이만큼 반복
for i in range(len(smooth_prices)):
# 10개씩 데이터를 가져오기 (맨 앞부분은 데이터가 부족할 수 있음)
if i < window_size - 1:
slopes.append(None) # 데이터가 부족하면 기울기 없음
continue
# 최근 10개 데이터를 가져오기
x = smooth_prices[i - window_size + 1 : i + 1].values # 최근 10개 데이터
# x축 (인덱스) 생성 -> [0, 1, 2, ..., 9]
x_index = np.arange(len(x))
# 1차 다항 회귀 (선형 회귀) 적용 -> 기울기 계산
slope = np.polyfit(x_index, x, 1)[0]
# 보기 좋게 100배 확대
slopes.append(slope * 100)
return slopes
'devops > back-end' 카테고리의 다른 글
파이선 롤링의 역할 | python rolling (0) | 2025.03.09 |
---|---|
파이썬 언어교정 hanspell설치하기 (0) | 2025.02.17 |
파이썬에서 스레드로 동일한 함수사용할때 전역변수 처리 (1) | 2024.10.17 |
ModuleNotFoundError: No module named 'Crypto' 오류 해결방법 (0) | 2024.10.15 |
JAVA 팁 (0) | 2022.08.17 |