W1M1 - mtcars 데이터 분석하기

팀 활동 토의 결과

  1. 데이터셋을 분석해서 얻을 수 있는 경제적 가치는 무엇일까요? → 소비자에게 자동차 추천할 때!

    판매량, 가격과 같은 경제와 직접적으로 연관된 데이터가 없으니 연비를 기준으로 경제적 가치를 설명하는 것을 전제로 한다. 데이터상으로는 실린더의 개수가 적고, 배기량이 낮고, 무게가 가벼운 차일수록 연비가 높았다. 따라서, 연비가 높은 차를 생산하는 것이 경제적 가치가 높을 것으로 예상된다.

  2. 어떤 비즈니스 상황에서 이런 데이터셋을 분석해서 어떤 경제적 가치를 얻을 수 있을까요?

    판매량과 가격도 포함된 데이터를 분석할 때, 어떤 자동차를 얼마나 더 생산해야 하는지 수정하여 판매 수익을 높이는 방향으로 경제적 가치를 얻을 수 있다.

  3. 중요한 데이터인 연비를 기준으로, wt(무게), cyl(실린더 개수), disp(배기량)을 선택했고, 그 중 상관계수가 가장 높은 무게를 그래프로 그려보았다. → 기계적으로 누구나 할 수 있지만, 어느 관점에서 보느냐가 더 중요하다.

# 변수간 상관관계 그래프
# draw a linear regression line between mpg and wt, mpg and cyl, mpg and disp
import seaborn as sns
sns.lmplot(x='wt', y='mpg', data=df, height=6, aspect=1.5)
plt.title('MPG vs Weight')
plt.xlabel('Weight')
plt.ylabel('MPG')
plt.show()

sns.lmplot(x='cyl', y='mpg', data=df, height=6, aspect=1.5)
plt.title('MPG vs Cylinders')
plt.xlabel('Number of Cylinders')
plt.ylabel('MPG')
plt.show()

sns.lmplot(x='disp', y='mpg', data=df, height=6, aspect=1.5)
plt.title('MPG vs Displacement')
plt.xlabel('Displacement')
plt.ylabel('MPG')
plt.show()

# P-value로 상관관계 분석
from scipy import stats
slope, intercept, r_value, p_value, std_err = stats.linregress(df['wt'], df['mpg'])
print(f'P-value of wt and mpg: {p_value}, equation: y = {slope:.2f}x + {intercept:.2f}')
slope, intercept, r_value, p_value, std_err = stats.linregress(df['cyl'], df['mpg'])
print(f'P-value of cyl and mpg: {p_value}, equation: y = {slope:.2f}x + {intercept:.2f}')
slope, intercept, r_value, p_value, std_err = stats.linregress(df['disp'], df['mpg'])
print(f'P-value of disp and mpg: {p_value}, equation: y = {slope:.2f}x + {intercept:.2f}')

위 그래프와 선형회귀분석을 통해 무게, 실린더 개수, 배기량이 증가할수록 연비가 감소하는 것이 유의미한 것을 알 수 있다.

W1M2 - SQL Tutorial

데이터베이스 시간에 배웠던 내용이라 딱히 어렵진 않았다.

MySQL에서는 지원하지만 SQLite3에서는 지원하지 않는 keyword들이 좀 있어서 이거를 구분하는데 조금 시간이 걸렸다.

query("""
SELECT ProductName
FROM Products
WHERE ProductID IN (
    SELECT ProductID
    FROM OrderDetails
    WHERE Quantity = 5
);""") 

서브쿼리를 만들어서 가져오는 것에 아직 익숙하지 않은 것 같다

ALL, ANY 연산

all 연산자는 서브쿼리의 모든 조건을 만족해야 결과를 리턴할 수 있다.

sqlite에선 any와 all 연산자가 지원되지 않아서 in 연산자로 이를 대체할 수 있다.

any는 단순히 in을 대신 사용해 대체할 수 있지만, all은 in을 대신 사용하는 것뿐만 아니라, 서브쿼리에 group by나 having과 같은 조건을 추가해야 완전히 대체될 수 있다.