분석 Python/구현 및 자료(105)
-
선형 Kalman Filtering 알아보기
목차 Why Kalman filters? 자율 주행 자동차를 만들고 환경에서 그 위치를 파악하려고 한다고 상상해 보면, 자동차의 센서는 자동차, 보행자, 자전거 이용자를 감지할 수 있습니다. 이러한 물체의 위치를 알면 차량이 판단을 내리고 충돌을 방지하는 데 도움이 됩니다. 그러나 자동차는 물체의 위치를 아는 것 외에도 미래의 위치를 예측해야 사전에 무엇을 할지 계획할 수 있습니다. 예를 들어, 도로를 향해 달리는 어린이를 감지하는 경우 어린이가 멈추지 않을 것으로 예상해야 합니다. Kalman Filter는 시스템 상태의 추적 및 추정을 지원하는 데 사용되므로 이 문제를 해결하는 데 도움이 될 수 있습니다. 자동차에는 물체의 위치를 결정하는 센서와 물체의 미래 위치를 예측하는 모델이 있습..
2021.10.08 -
Python) 회귀 분석 기본 사용법 정리(scikit-learn, statsmodels)
파이썬에서 Linear Regression 하는 것에서 기본적인 것이 Scikit-Learn이 있는데, 통계분석을 같이 하고 싶다면 statsmodels 을 쓰는 것이 더 좋다. 그래서 오랜만에 쓸 기회가 있어서 사용하다가 정리를 해봤다. 목차 Library import statsmodels.api as sm import numpy as np import pandas as pd from sklearn.linear_model import LinearRegression 연속형 변수 data spector_data = sm.datasets.spector.load(as_pandas=True) df = spector_data.raw_data y_col = ["GRADE"] x_cols = ["GPA","TUCE"..
2021.08.11 -
notion-py를 사용하여 캘린더 만들기
다들 테이블 만드는 것은 있는데, 캘린더 만드는 것은 없는 것 같아서 글을 적어보고자 한다. 목차 notion-py 설치 https://github.com/jamalex/notion-py pip3 install notion notion token 값 얻기 아래 글을 참고해주시면 된다. 간단하게 크롬에서 notion 페이지 들어가서 F12 -> Application -> Cookies -> notion.com -> token_v2에 있는 값을 가져오면 된다. https://minimin2.tistory.com/99 소스 설명 token_v2 = ### url = ### (적용하고자 하는 노션 위치) client = NotionClient(token_v2 = token_v2) page = client.get..
2021.08.08 -
Python) Yield 에 대해서 알아보기
yield에 대해서 생각보다 많이 쓰는 것 같은데, 너무 모르는 것 같아서 정리해보고자 합니다. yield는 주로 Generator에서 쓰이게 되며, Python Generator를 정의하는 핵심은 "yield" 키워드를 사용하는 것이라고 합니다. Python Generator는 대규모 collection이 필요한 시나리오 및 멀티 스레딩과 같은 기타 특정 시나리오 및 코드의 가독성을 향상하는 시나리오에서 널리 사용됩니다. 이 글에서 모든 것을 다룰 수는 없겠지만 기본적인 개념이나 고급 사용 방법에 대해서 적어보고자 합니다. 일단 generator를 알아보고자 합니다. 목차 Iterator란? 그 전에 알아야 하는 것은 Iterator입니다. Iterator란 반복 가능한 객체, 즉 반복문을 이용해서 데..
2021.08.07 -
or-tools) 제한 조건 만족하는 특정 인자에 대한 경우의 수 찾기
제한 조건을 이용해서, 솔루션이 아닌 제한 조건을 만족하는 범위를 찾고자 하는 문제를 풀고 싶었다. 해당 문제에서는 순차적 경우를 가정해서 문제를 풀기로 하였다. 아직 상상으로 해보는 것은 특정 인자가 결정이 되면, 다른 인자도 영향을 받기 때문에, 순차적으로 밖에 생각이 들지 않는다. 그래서 인자를 하나씩 찾아나가는 것을 진행해 봤다. 기본 제한 조건은 다음과 같이 진행했다. $ 0 \le x \le 100$ $ 0 \le y \le 100$ $ 0 \le z \le 100$ $ 0 \le 2*x+7*y+3*z \le 50$ $ 0 \le 3*x-5*y+7*z \le 45$ $ 0 \le 5*x+2*y-6*z \le 37$ 인자들의 연관성의 가정은 x->y->z로 가정을 하고, 한 개의 인자가 결정되거..
2021.08.01 -
pycaret 2.3.1) tune_model hyperopt example
pycaret에서 search_library 중에서 tune-sklearn을 사용할 때 방법을 공유한다. 특히 custom_grid를 통해서 구현된 것이 없어서 시행착오의 결과를 공유하고, 결론적으로 모든 기능을 완벽히 제공하는 것 같지는 않다 ( 21/06/20 기준) pycaret version : 2.3.1 일단 custom_grid를 보면 format은 search_library를 기준으로 한다고 한다. 그래서 search_library를 가보니 각 방법에 따라서 링크가 걸려있다. 그래서 들어가 보니 다음과 같이 tune을 통해서 choice 하거나 loguniform을 하는 것을 알 수 있었다. # Define the `param_dists using the SearchSpace API # Th..
2021.06.20 -
numpy에서 dict을 이용해서 값을 바꾸는 방법
특정 배열에서 dict을 이용해서 바꿔야 하는 경우가 있다. 기존에는 바꾸기 위해서 pandas에 replace를 사용하였는데, 이것이 은근 계산 비용이 많이 든다. 그래서 이 부분을 바꾸기 위해서 찾다가 발견한 것이 있어 공유한다. Code def replace_with_dict(ar, dic): # Extract out keys and values k = np.array(list(dic.keys())) v = np.array(list(dic.values())) # Get argsort indices sidx = k.argsort() # Drop the magic bomb with searchsorted to get the corresponding # places for a in keys (using ..
2021.06.06 -
tqdm) print대신에 tqdm을 이용해서 logging 방법
간혹 먼가 로깅을 하고 싶은 경우에 print를 많이 쓴다. 하지만 print를 하다 보면, 계속 남기 때문에 메모리를 차지하거나 보기에 좋지가 않다. 그래서 이런 것을 해결할 수 있는 게 보통 tqdm이고 여기서 logging과 tqdm을 접목시켜 tqdm 방법을 이용해서 logging까지 하는 것을 공유한다. tqdm logging handler 라는 것을 구현해서 사용하면 되기 때문에 공유한다. tqdm handler import logging from tqdm import tqdm class TqdmLoggingHandler(logging.StreamHandler): """Avoid tqdm progress bar interruption by logger's output to console""" ..
2021.05.15 -
python3.7 이후) dataclass __post_init__ 간략하게 알아보기
처음 보는 거라 처음에 굉장히 당황해서 남겨 놓는다. python3.7 부터 생긴 기능인 것 같은데 dataclass decorator와 __post_init__을 사용해서 디폴트값을 설정할 수 가 있고, overidding을 계속 안해줘도 되는 것 같다. 디버깅을 해도 이부분은 확인이 안되서 난감했는데, 좋은 기능이라 생각하고 메모 from dataclasses import dataclass, field @dataclass class Book : n_d: int = 8 n_a: int = 8 n_steps: int = 3 def __post_init__(self,): self.full = self.n_d + self.n_a c = Book() print(c.n_d) print(c.full) c = Bo..
2021.04.25 -
[Python] Icecream 패키지를 사용하여 디버깅하기
파이썬 코딩을 하다 보면, 모르는 부분에 디버깅 툴이 없다면, print를 해서 찾는 경우가 많다. 필자도 print로 하나하나 하는 습관이 많이 있었지만, 실수가 있기 때문에 디버깅에 어려움을 느낀다. 그래서 어쩌다 찾게된 패키지가 icecream이다. 해당 패키지를 사용하게 되면 디버깅 시에는 프린트가 되게 하고, 안될 때에는 전부 다 안되게 할 수 있는 설정이 있다. 아래와 같이 debug시에는 사용하는 모드와 비사용모드를 선택할 수 있기 때문에 항상 프린트를 하고 지우지 않아도 프린트가 안된다라는 장점이 있다. from icecream import ic ic(1) ic.disable() ic(2) ic.enable() ic(3) # ic| 1: 1 # ic| 3: 3 뿐만 아니라 custom pr..
2021.01.16 -
[Python] itertools
Chain list들을 연결해줄 때 쓸 수 있다. list를 더할 때 + 와 같은 역할을 해준다. import itertools letters = ['a', 'b', 'c', 'd', 'e', 'f'] booleans = [1, 0, 1, 0, 0, 1] decimals = [0.1, 0.7, 0.4, 0.4, 0.5] print(list(itertools.chain(letters, booleans, decimals))) print(letters + booleans + decimals) # ['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1, 0.1, 0.7, 0.4, 0.4, 0.5] # ['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0,..
2021.01.01 -
[Python] 적절한 샘플 사이즈를 찾아주는 코드
모집단이 클 경우에는 샘플링을 통해 시각화를 위해서나 통계치를 뽑아줘야 할 것이다. 이때 가장 적절한 샘플사이즈를 알려주는 코드가 있어서 공유한다. 그리고 각각에 대해서 분포별로 실험을 진행해봤다. def sampleSize( population_size, margin_error=.05, confidence_level=.99, sigma=1/2 ): """ Calculate the minimal sample size to use to achieve a certain margin of error and confidence level for a sample estimate of the population mean. Inputs ------- population_size: integer Total size o..
2021.01.01