미니프로젝트6

Yeeun·2025년 6월 18일
0

웹 개발 프로젝트

목록 보기
10/16

파이썬 인스턴스화의 중요성

self 가 들어있는 메소드는 스테틱이 아니라 클래스를 인스턴스화해야지만 쓸 수 있음

DeliveryRepurchaseAnalyzer 라는 메소드가 있다치면

이렇게하면 인스턴스화 한게 아니라 an은 클래스자체를 참조만 한거라
DeliveryRepurchaseAnalyzer.load_data()를 한 꼴이 되어버림

꼭 클래스뒤에 () 이거 써서 인스턴스화 해주기.

에러도 굳이 별칭 ?? alias 쓰는 이유


e를 굳이 쓰는 이유는 에러메세지 출력하기 위해서. 그냥 파일 낫파운드에러를 {} 이 안에 넣어버리면 클래스 이름만 출력되고 어디에서 로드실패인지 안뜸

이렇게 떠야함

lifelines 쓸거면 pip install lifelines 해서 깔아야함
근데 넘파이, 사이파이, 판다스 등을 깔아야 작동됨
그리고 그거 깔때 가상환경 쓰고있으면 터미널에서 지금 가상환경실행한데서 까는지 아닌지 잘 살피기. 전역에서 까는 실수 자주함

포맷스트링 사용시 주의할점 (string interpolation)

{} 이 안에 인덱스 넣기. 포맷 메소드는 키워드가 아니라 포지션을 주는거라
{n}이런식으로 하면 오류남

딕셔너리스타일로 쓸거면, 모듈러percent formatting랑다르게 언팩해야함. 딕셔너리 자체를 포지션0으로 받아버리는거라 . 풀어야지 각각 포지션으로 들어감
아니면 맵으로 받기
'geel {cc}'.format_map({'dd':'nam','cc':'n'})
Output: 'geel n'

Conversion Specifiers
%[flags][width][.precision][length]type
이 순서인거 기억하기.
그리고 다른건 다 옵션인데 타입은 무조건 적어야함 %s 뭐 이렇게
그리고 flag는 부호도 되고 0으로 채우는거도 되고 공백으로 채우는것도 되고
또 width에 .(데시멀포인트)도 길이 1개에 포함됨.
.3f 뜻이뭐임?
.다음에 3개 숫자온다는거 f니까 플로팅으로 3개옴
0.111234 을 %.3f 혹은{:.3f} 입력하면 이건 이렇게 출력됨 '0.111'

value = 123456789.14159
print("%8.3f" % value)
output : 123456789.142

width 가 최소길이임 , 최대가 아니라 / 그러니생략안됨

길이를 10개로 해라 하면 앞에 뭐 안채워넣으면 10개길이가 안되서 공백채워짐. 0으로 채우려면


i:05d의 의미는 빈칸 0으로 채우고 길이 5개고 데시멀(십진수)로 해라는 의미. i라는 애로 포맷스트링 삽입interpolate 하고. 리스트컴프리헨션으로 커스터머아이디는 이렇게 한번에 리스트로 만들어 받는거임.

그리고 np.random.choice

numpy replacement 파라미터는 뽑고나서 다시 뽑을 수 있는애로 돌려놓을지 아니면 한번만 뽑을 수 있게 할지인데 기본디폴트가 트루임 . 여러번 뽑을 수 있게된거임.

'customer_state': np.random.choice(['SP', 'RJ', 'MG', 'DF'], n_customers)
즉 이 코드는 저 리스트 안에서 랜덤으로 중복허용해서 뽑는데 따로 튜플로 (1,2) 이런식으로 두번째 파라미터 (size)를 안줬으니 그냥 n_customers 사이즈만큼 뽑아라서 배열을 만들어라. 라는 뜻

pandas.date_range

freq 는 어느간격으로 띄울지임. 5일간격 하루간격 이런식
freqstr: String alias for frequency (e.g., 'D', '5H', 'M').

Timedelta/datetime.timedelta: Fixed duration between dates (e.g., 2 days, 4 hours). 타임델타는 판다스 객체고 , 데이트타임.타임델타는 파이썬 내장객체임

DateOffset: Calendar-based increments, handling more complex rules (e.g., month end, business day). 비지니스 캘린더 규칙 포함한거 할때

Default: 'D' (daily)

그리고 tz= timezone 매우중요

이거 내가 설정 따로 안하면 그냥 날짜,시간만 입력됨 그니까 서울이든 런던이는 9시로 인식되는거임. 근데 tz='Asia/Seoul' 이렇게 해두면 그리니치천문대기준 몇시간인지까지 같이 정보가 넘어가서 정확해짐. 한국에서만 쓸거면 tz안해도되지만 해외에서도 쓰는 데이터면 설정해야ㅏ.
2025-06-18 13:00:00 이게아니라 2025-06-18 13:00:00+09:00 이런식으로 인지됨

numpy.random.lognormal

여기서 평균과 분산 넣어주는건 로그에 쓰는게 아니라 정규분포의 평균과 분산으로 사용되고 , 그걸 로그시키는거임. 그리고 중심극한정리가 성립하는 이유가 (많이 시행하면 독립변수이고 확률도 같아도 평균이랑 분산이 정규분포가 되는거)
가령 동전이라 치면, 0이랑1이랑 헤드 테일이라는 확률만 0.5있고 확률만 알지 패턴을 모르는데 여러번하면 패턴이 보임. 그래서 그 패턴에서 평균이 0.5인 정규분포 구할수있음
여기서 0.5는 확률이 아니라 값임 장기적으로 반복했을때 기댓값,평균값임
계산식
μ=1×P(heads)+0×P(tails)=1×0.5+0×0.5=0.5

    delivery_days = np.random.lognormal(2.5, 0.8, n_orders)  # Log-normal distribution

e^2.5
≈12.2 days and a realistic spread

0개의 댓글