- FACTS :
- 🔺 오전 통계학 개인과제
문제4, 문제5, 문제6 - ✅ 오전 머신러닝 기초 VOD 1주차 완강
- [ ] 오후 파이썬 베이직 라이브세션 복습
- ✅ 오후 QCC 3회차 1문
- [ ] 오후 머신러닝 심화 VOD 1주차
- FEELINGS :
QCC3회차를 다시 풀어보면서 주어진 문제를 잘 뜯어보면서 내가 만족해야할 조건들을 나눠서 주석으로 쓰고 코드를 짜는 연습을 했다.
확실히 이렇게 하니까 조건을 모두 만족시켰는지 확인하기 편했다. 단,, 쿼리를 짜는 시간이 부족해진다는 것이 단점... 코딩테스트라는게 과정이 아무리 좋아도 정답과 다르면 틀린답이 되어버리니까 결과만 봤을 때는 좀 힘든것 같다. (부분 점수가 있었으면..ㅎㅎㅎ)
- FINDINGS :
[Python] plt.subplots()의 사용법
[SQL] WITH문에서는 특정 조건을 만족시키는 값의 컬럼만 간단히 가져오고 본 쿼리에서 다시 원래 테이블과 JOIN하기
통계학 개인과제 문제4
문제
- 다음 click_rate 데이터는 헤드라인별 클릭과 클릭하지 않은 수 에 대한 데이터입니다.
- 귀무가설과 대립가설을 설정하세요.
- 카이제곱 검정 수행하여 실제로 클릭률에 대한 차이가 있는지 유의수준 0.05 에서 검정해보세요.
#제출 코드
import pandas as pd
from scipy import stats
# URL 로 데이터 가져오기
url = "https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/click_rates.csv"
click_rate = pd.read_csv(url)
clicks = click_rate.pivot(index='Click', columns='Headline', values='Rate')
display(clicks)
#귀무가설, 대립가설 설정
print("H0: 귀무가선은 헤드라인과 페이지 클릭율에 관련이 없다.")
print("H1: 대립가들은 헤드라인과 페이지 클릭율에 관련이 있다.")
#카이제곱 통계량, p-value, 자유도, 기대값
chi2_stat, pvalue, dof, expected = stats.chi2_contingency(clicks, correction=True)
print(f"chisq: {chi2_stat:.3f}")
print(f"pvalue: {pvalue:.3f}")
# 결론
alpha = 0.05 # 유의수준
if pvalue < alpha:
print("귀무가설 기각: 헤드라인과 페이지 클릭율에는 관련이 있다.")
else:
print("귀무가설 채택: 헤드라인과 페이지 클릭율에는 관련이 없다.")
[출력]
문제5. 중심극한정리(CLT) - 1: 데이터 생성하기
문제
- `scipy.stats` 모듈에서 다음 분포를 생성하고 히스토그램으로 표현하기(subplots권장)
- 변수
- 이항 분포 샘플 변수명 `binomial_data`: 확률 0.5의 시행을 10번 시행했을때 성공할 갯수의 1000개의 표본 생성
- ex 동전 10번 던졌을때 앞면이 나올 수 있는 수는 0부터 10개
- 균등 분포 샘플 변수명 `uniform_data` : 시작 0, 끝 10의 표본 1000개 생성
- 표준 정규 분포 샘플 변수명 `normal_data` : 표본 1000개 생성
- 위 분포 3개를 히스토그램으로 표현하되 `plt.subplots(1,3)`을 이용하여 동시에 표현하고, `bins` 는 20개로 설정
import pandas as pd
import scipy
from scipy import stats
import matplotlib.pyplot as plt
np.random.seed(42)
# scipy를 통한 샘플 생성
binomial_data = scipy.stats.binom.rvs(size = 1000, p = 0.5, n = 10) #이항 분포 샘플
uniform_data = scipy.stats.uniform.rvs(size = 1000, loc = 0, scale = 10) #균등 분포 샘플
normal_data = scipy.stats.norm.rvs(size = 1000) # 표준 정규 분포 샘플
# 확인용
# print(binomial_data)
# print(uniform_data)
# print(normal_data)
#시각화
plt.figure(figsize=(15, 5))
#히스토그램
fig, axes = plt.subplots(1,3,figsize=(15, 5))
axes[0].hist(binomial_data, bins=20, color= 'blue')
axes[0].set_title('Binomial Distribution') #제목
axes[0].set_xlabel('Value') #x라벨
axes[1].hist(uniform_data, bins=20, color= 'green')
axes[1].set_title('Uniform Distribution')
axes[1].set_xlabel('Value')
axes[2].hist(normal_data, bins=20, color = 'red')
axes[2].set_title('Normal Distribution')
axes[2].set_xlabel('Value')
참고: https://tempdev.tistory.com/35
Matplotlib로 subplot을 생성하고, 겹치지 않게 하기
matplotlib를 사용하면서 subplot을 만들어야 하는 상황이 생긴다. subplot(), add_subplot(), subplots() 이 세 개의 함수은 subplot을 만드는데 쓰인다. 사용법의 차이를 알아보기 위하여 아래 x로부터 생성된 y1,
tempdev.tistory.com
공식 문서: https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplots.html
matplotlib.pyplot.subplots — Matplotlib 3.10.0 documentation
matplotlib.org
마지막에 출력을 했는데 그래프 사이즈가 이상해서 figsize값을 조절해도 바뀌지 않았다.
plt.figure(figsize=(15, 5))를 호출한 후에, subplots을 사용하게 되면 새로운 figure가 생성됩니다. 따라서 figsize가 설정된 효과가 반영되지 않는다고 한다.
따라서 subplot을 생성할 때 figsize를 다시 설정해주고 나니 예쁘게 표현됐다.
# Subplot 생성 시 figsize를 설정
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
QCC3회차 복습
문제1
“2011년 12월”에 첫 주문을 한 고객들의 연도별 매출을 조회하는 SQL 문을 작성하세요.
고객 이름은 이름과 성을 결합하여 생성합니다.
결과는 고객 ID(customerid)기준 오름차순, 연도(year) 기준 오름차순으로 정렬합니다.
[task]
조건1. "2011-12"에 첫 주문한 고객
조건2. 고객 이름을 이름 + 성으로 결합한 새컬럼 만들기
조건3. gmv계산
조건4. orderby customerid, year;
#내가 쓴 서브쿼리
SELECT so.customerid AS customerid ,
CONCAT(c.firstname, ' ', c.lastname) AS customer_name, -- 조건2
DATE_FORMAT(orderdate, '%Y-%m') AS new_date,
SUM(unitPrice * orderQty) AS gmv -- 조건3
FROM sales_order so
JOIN customer c ON so.customerid = c.customerid
GROUP BY customerid, customer_name
HAVING DATE_FORMAT(MIN(so.orderdate), '%Y-%m') = '2011-12' -- 조건1
#정답의 서브코트
SELECT
c.customerid
,CONCAT(c.firstname, ' ', c.lastname) customer_name
FROM
customer c
INNER JOIN sales_order s ON c.customerid = s.customerid
GROUP BY c.customerid, customer_name
HAVING DATE_FORMAT(MIN(s.orderdate), '%Y-%m') = '2011-12'
-> 나는 서브쿼리에서 최대한 많은 조건을 만족시키려고 했는데 정답코드에서는 조건1,2를 만족하는 데이터의 customerid와 customer_name만 WITH문으로 설정해주고 본 쿼리에서 다시 원래 테이블과 조인을 시켜줬다.
'내일배움캠프 > TIL' 카테고리의 다른 글
[TIL]250117_QCC4회차, 개인과제 복습 (0) | 2025.01.17 |
---|---|
[TIL]250116_파이썬 베이직 4회차 복습, 개인과제 문제6 (0) | 2025.01.16 |
[TIL]250114_SQL,알고리즘 코드카타, 통계학 개인과제1~3번 (0) | 2025.01.14 |
[TIL]250113_코드카타, 파이썬 베이직 라이브세션 (0) | 2025.01.13 |
[TIL]250110_코드카타, 파이썬 개인과제 6번 (0) | 2025.01.10 |