728x90
SMALL
- 오늘은 오전에 간단히 다나와 무선 청소기 제품 관련 데이터를 분석해봤고, 오후에는 미세먼지, 행복 지수 데이터를 가지고 놀았습니다!
🧹 다나와 무선 청소기 데이터 분석
- 다나와 사이트에서 제공하는 무선 청소기 데이터 300개 가량을 가지고 분석을 진행해보았습니다.
- 보통 실무에서는 이런 제품 데이터를 분석해서 마케팅이나 상품 전략 기획 등에 사용한다고 합니다.
✨ 데이터 전처리
💡 회사명과 상품명 분리
- 우선, 상품명 데이터가 'LG전자 코드제로 A9 A978' 이런 식으로 들어가 있었기에 이를 회사명과 상품명으로 분리해 다시 저장하는 작업을 실시했습니다.
- 이 작업에 split() 함수가 사용되었는데, 이때 split() 함수에 인자값으로 1을 추가로 넣어주게 되면 즉, split(' ', 1)처럼 실행하게 되면, 첫 번째 공백까지만 쪼개진다고 합니다. 코드를 살펴보시면 이해가 쉬울 겁니다!!
product = 'LG전자 코드제로 A9 A978'
info = product.split(' ', 1)
print(info)
# 출력값
# ['LG전자', '코드제로 A9 A978']
💡 필요한 요소 추출
- 두번째로는 데이터에서 필요한 요소들만을 추출하는 작업을 거쳤습니다.
- 이때 카테고리, 사용 시간, 흡입력, 전압을 뽑아내야 했었는데, 실제 데이터는 이렇게 저장되어 있었습니다.
'핸디/스틱청소기 / 전압: 25.2V / 헤파필터 / 흡입력: 140AW / 흡입력: 22000Pa / 먼지통용량: 0.5L / 사용시간: 1시간 ...'
- 그래서 이것도 split(' / ')을 사용해 구분해주고, 전압은 V 단위를 뗀 상태로, 사용 시간은 통일시키기 위해 시간을 분 단위로 변경하고, 흡입력은 Pa보다 더 적은 단위인 W와 AW에 맞춰주기로 했습니다.
- 그리고 마지막으로 이들 중 카테고리가 '핸디/스틱청소기'인 친구들만 가져와 최종 데이터로 저장하였습니다.
✨ 데이터 시각화
- 이제 최종 데이터로부터 각 컬럼에 대해 평균값을 구하고, 이 평균값보다 좋은 데이터들을 '가성비 있는 제품'이라고 칭했습니다.
- 그래서 모든 '핸디/스틱청소기'에 대해 성능을 비교해보기 위해 sns.scatterplot()으로 시각화를 해보았습니다.
- 여기서 나타나는 라인들은 흡입력과 사용 시간의 평균을 나타내는 선이고, 각 점들의 크기는 가격, 색상은 회사명을 나타내고 있습니다.
- 그리고 상위 20개의 제품만을 가져와 회사명과 함께 시각화를 추가로 진행하게 되었습니다.
- 회사명을 plot에 그려줄 때에는 plt.text()를 사용해서 그려주었습니다. 아래는 사용 예시입니다.
for idx, row in chart_data_selected.iterrows():
x = row['흡입력']
y = row['사용시간']
label = row['회사명']
plt.text(x + 0.5, y + 0.5, label, fontsize=20,
fontweight='bold', color='black')
😷 미세먼지랑 날씨, 너네 무슨 사이야
- 이번에는 몇 가지 주제를 가지고 미세먼지 데이터와 날씨 데이터의 상관성을 분석해보고자 합니다.
✨ 데이터 전처리
- 우선, 미세먼지 데이터는 날짜가 '2021-01-01 01' 이런 식이고, 날씨 데이터는 Timestamp('2021-01-01 01:00:00') 이런 식이었기 때문에 이 둘을 맞춰줄 필요가 있었습니다.
- 그리고 미세먼지 데이터는 24시로 기록되어 있는 것이 날씨 데이터는 00시로 기록되어 있어서 이 부분도 따로 처리를 해주었습니다.
- 데이터에 결측치가 있긴 했는데 정말 미미한 정도라
이들은 dropna()로 제거했으며, 날짜를 기준으로 미세먼지, 날씨 데이터를 병합하여 최종 데이터를 생성해냈습니다!- 근데 이러면 안 되는 게... 시계열 데이터기 때문에 중간에 끊기게 되면 큰일이 나버립니다 !!!
- 그래서 다시 결측치를 fillna()로 처리했습니다. 저희는 method='pad'로 설정해서 처리했습니다.
- 그리고 병합 시에, 미세먼지는 shape이 (744, 11), 날씨는 (743, 6)이었기에 미세먼지 데이터의 마지막 행을 날리고 병합하였습니다.
- 마지막으로 날씨 데이터를 살펴보았을 때, 기상청에서는 0.1 단위로 강수량을 측정하고, 0.1 이하로 비가 내리면 강수량을 0으로 표시한다고 해서 좀 더 세부적인 값을 측정하기 위해 강수량이 0인 값을 0.01로 변환하여 다시 넣었습니다.
💡 df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
- value: 결측값을 대체할 값을 넣어줍니다. dict 형태로도 가능합니다.
- method: 결측값을 변경할 방식을 정해주는 옵션입니다.
- 'bfill'이나 'pad'로 설정할 경우, 결측값을 바로 아래 값과 동일하게 변경해주고,
- 'ffill'로 설정할 경우, 결측값을 바로 위 값과 동일하게 변경해줍니다.
- axis: 0이면 index, 1이면 columns를 의미하며, fillna() 함수를 적용할 레이블을 지정할 때 사용합니다.
- inplace: 원본을 변경할 지를 결정해줍니다. True일 경우 원본을 변경합니다!
- limit: 결측값을 변경할 횟수를 정해줍니다. 위에서부터 limit까지 지정된 갯수만큼만 변경합니다.
- downcast: 다운캐스트할 지 여부를 정해줍니다. 'infer'로 설정할 경우, float64를 int64로 변경해줍니다.
✨ 데이터 시각화
- 처음 살펴본 것은, 각 변수의 분포였습니다. df.dist()를 사용해서 바로 확인할 수 있었습니다.
- 그 다음으로는 시계열 데이터였기 때문에 시간별 미세먼지, 초미세먼지의 농도 변화를 살펴보았습니다.
- 해당 연도의 1월 13일의 미세먼지가 가장 높아서 관련 기사를 확인해보니, 1월 황사 때문인 것으로 밝혀졌습니다.
🎨 미세먼지와 초미세먼지는 당연히 관계가 깊겠지...?
- 둘의 관계를 살펴보기 위해 regplot()으로 산점도 + 회귀선까지 그려 시각화를 해보았을 때, 다음과 같은 결과를 보였습니다.
- 이 둘은 당연하게도 강한 양의 상관관계를 보인다는 것을 알 수 있었고,
- 이유는 미세먼지와 초미세먼지가 동일한 대기 오염원, 그리고 기상 요인에 의해 함께 증가하고 감소하기 때문이라고 추측됩니다.
🎨 미세먼지 변수 중에서 대기 오염과 관련된 건 뭘까?
- 미세먼지와 초미세먼지가 대기 오염 관련 변수였기 때문에, 특정 변수가 이 변수들과 강한 상관 관계를 보이면 특정 변수 역시 대기 오염과 관련있을 것이라고 가설을 세워봤습니다.
- 그 후 heatmap()으로 각 변수들의 상관 관계 행렬을 시각화해 본 결과입니다.
- 확인해보면, 일산화탄소, 이산화질소, 미세먼지, 초미세먼지 간에는 대체로 강한 양의 상관관계가 존재하는 것을 확인했고,
- 오존은 다른 오염 물질들과는 생성 구조가 달라서, 음의 상관관계나 약한 상관성을 보이는 경우가 다수라고 판단했습니다.
🎨 일산화탄소와 이산화질소는? 오존과 바람은? 기온과 미세먼지도 관계가 있나?
- 일산화탄소와 이산화질소를 살펴보면, 높은 양의 상관계수를 가지고, 자동차가 많은 강남구 지역에서의 데이터라 확실히 두 변수가 함께 증가하고 감소하는 것을 볼 수가 있습니다.
- 오존 농도와 풍속 그래프에서는 풍속이 증가할수록 오존 농도도 약간 증가하는 경향은 있긴 하지만, 상관계수가 0.355라서 크게 상관이 있진 않아보입니다.
- 마지막으로 미세먼지와 기온을 놓고 보았을 때는, 그래프를 봐서도, 상관 계수가 0.175인 걸 봐서도 둘은 무관하다고 봐야할 것 같습니다.
😀 어느 지역이 가장 행복할까!
- 추가 과제로 분석을 진행했기 때문에 여기서는 시각화된 그래프와 나름의 결론만 남겨두고 가겠습니다.
✨ 데이터 시각화 + 결론
🎨 시도별로 살펴 본 행복 지수 요소들(line)
- 행복 지수를 구성하는 여러 요소가 지역마다 균등한 것이 아니라 '세종시가 삶의 만족도는 높고, 안전 지수는 낮은 것'과 같이 특정 요소에 특화되어 있는 지역이 존재함을 확인할 수 있었습니다.
- 지역마다 정책이나 환경 등을 추가적으로 고려해야 종합적으로 분석이 가능할 것 같습니다.
- 대체적으로 안전 지수는 모든 시도가 낮은 편이고, 대전의 경우, 건강 지수는 높은 반면, 안전 지수는 가장 낮게 측정되어 있습니다.
- 희한(?)하게도 부산은 여가 지수가 낮고, 서울시는 각 요소의 편차가 작은 편입니다. (무난무난)
🎨 시도별로 살펴 본 행복 지수 요소들(bar)
- 각 요소별로 세부적으로 살펴봤을 때, 경제 지수면에서는 울산시가 유독 높았고, 삶의 만족도 측면에서는 세종시가 특히 높은 것을 볼 수 있습니다. 대신에 세종시는 안전과 건강 지수가 낮네요.
- 제주시만 놓고 봤을 때에도 다른 요소들은 평균 혹은 평균 이상인 반면에, 건강 지수는 낮은 것을 확인할 수 있었습니다.
🎨 행복 지수 요소 간의 상관 관계
- 환경과 경제 지수의 상관 계수가 -0.62로 나타나는데, 산업화가 진행된 도시일수록 환경적인 요소가 상대적으로 취약할 가능성이 있다고 가정할 수 있겠습니다.
- 여가와 안전 지수의 상관 계수는 0.43으로 강한 양의 상관 관계를 보이는데, 안전한 환경이 조성되어 있을수록 주민들이 여가 생활을 즐기기 쉬운 환경을 갖추고 있다는 것을 의미할 수도 있겠습니다.
🤔 18일차 회고
- 요즘 여러 분야의 데이터를 다뤄보며, 확실히 흥미가 가는 분야가 있고, 아닌 분야가 있는 것 같습니다.
- 이것을 토대로 제가 갈 회사의 도메인을 고민해보는 것도 좋아보이고, 추후에 할 프로젝트의 주제를 확립하는 데에도 도움이 많이 될 것 같습니다.
- 오늘만 놓고 봤을 때는 다나와 데이터를 분석했던 시간이 조금은 흥미롭네요! 제가 전에 미세먼지나 행복 지수는 프로젝트로 해봐서인가...
- 이번 주를 쭉 달려오면서 나름 데이터를 바라보는 시각과 데이터 확인 / 전처리 / 시각화의 절차가 착착 생기게 되어 너무나도 다행이라고 생각합니다. ✨
- 내일은 또 어떤 데이터가 기다리고 있을지 기대해보겠습니다. 🔥
728x90
LIST
'Projects > LG U+' 카테고리의 다른 글
[Data Analysis] 한국복지패널 데이터 (13) | 2025.03.09 |
---|---|
[Data Analysis] 야후 파이낸스 주식 데이터 (4) | 2025.03.05 |
[Data Analysis] 미국 항공기 운항 데이터 (4) | 2025.03.02 |
[Data Analysis] Starbucks & Mega Coffee 데이터 (4) | 2025.02.19 |
[Data Analysis] Netflix 데이터 (2) | 2025.02.14 |