오늘은
- pandas피벗테이블
- 중복 제거
- 결측 처리
- 컬럼명 변경
수업을 진행한 후
- 데이터 분석 _EDA 시각화 처리
- 개요
- 라이브러리 소개
- 한글처리
- MATPLOTLIB
- 선형차트
- seaborn
- Boxplot
- 산점도, 산포도, Scatter
- 상관관계
에 대한 수업을 진행하였다.
피벗 테이블



1. frac 설명 = 전체 모수의 50%를 샘플링하라는 뜻이다, 17개라서 8개만 했다.
2. 데이터상 Rep는 아마도 직원같다, 중간직급인? 그래서 모든 데이터를 가져온다.
이 때 세 코드 모두 정상적으로 작동하지만 loc를 사용한다면 고유한 문법을 지켜줘야 한다.
loc는 좌표를 특정해서 가져오기 때문에 그냥 df.loc['Rep']으로 가져오면 안되고 슬라이싱과 인덱스를 같이 써서 차원을 생각해줘야한다.
3. 모든 매니저를 구해온다. 아마 팀장급으로 예상된다.
- 피벗 테이블 적용
- 대상이 되는 컬럼
- 데이터가 중복적으로 출현하는 컬럼
- 범주형 데이터를 가진 컬럼
- 그 고유한 값의 수가 적어야 함
- 대상이 되는 컬럼

각 직원(추정)으로 생각되는 사람들의 판매 수, 판매 금액을 출력한다.

우리의 추측대로 매니저>중간직급>사원 순으로 인덱스를 잡아본다.

각 팀 기반의 영업 실적을 확인한다,
사원별 한 주문당 평균값, 주문 수, 합산으로 값을 세팅했다
그리고 나오는 결과로 인사이트를 도출할 수 있다.

그리고 각 팀별 총 매출과 평균 매출, 건수로 그룹화했다.
아마 debra팀 팀장은 쪼인트를 맞을거다

이제 각 사원들이 판매한 제품을 확인하여 데이터가 확실한지 체크할 것이다.
그런데 사원들마다 판매한 제품이 각각 달라서 결측치가 너무 많이 생긴다. 그래서 결측처리를 해줘야한다.

fill_value = 0 기능을 사용하면 결측치를 모두 0으로 처리할 수 있다.훨씬 깔끔해진 데이터 모습

그런데 fillna 함수를 사용하면 그냥 사본만 만들어준다, 원본에 데이터 수정이 안되니 이를 수행하고 싶으면 inplace 옵션을 주어서 원본에도 수정할 수 있다.
중복제거



drop_duplicates()함수는 중복되는 값을 버려주는 기능을 한다.
중복되는 최초 데이터는 살려두고, 나중에 발견되면 삭제한다.
결측처리
- 제거
- 행 제거 : 데이터 삭제
- 그 개수, 비율이 적으면 유리
- 단순하게 적용 가능
- 정보 손실 단점, 데이터상 편향 발생될 수 있음
- 열 제거 : 결측 빈도가 너무 높아서 제거
- 모델 단순화 장점, 정보 손실 단점
- 행 제거 : 데이터 삭제
- 대체
- 특정값으로 고정 -> 전체 대상
- 결측치를 특정 데이터로 간주
- 이상치가 되거나, 분포상 왜곡 초래할 수 있음
- 이전값 이후값 대체(next value 등등) -> 수치형
- 시계열 데이터에서 빈번하게 발생
- 금융(환율, 주가, 시세, . . .)
- 제조(스마트팩토리, IOT) 센서 데이터
- 평균/중앙값(4분위수의 50%지점) 등등 -> 수치형
- mean/median
- 아주 쉽게 적용
- 데이터의 퍼짐(분산)을 과소 추정하는 문제
- 표준편차의 부정확을 야기시킴,
- 상관관계를 무시
- 최빈값 대체 -> 범주형
- 빈도가 적다 -> 상관관계 무시, 변동성 문제
- 시계열 데이터에서 빈번하게 발생
- 특정값으로 고정 -> 전체 대상
- 모델 활용(더 있어보이게) AI 활용
- 머신러닝, 딥러닝 모델 이용하여 보정
- 회귀
- 선형적 관계 고려
- 믹스 -> 집단지성
- 여러 모델을 블랜딩하여 추정
컬럼명 변경 (초기작업)

컬럼명 변경 실습 위해서 다른 데이터를 받아왔다. 보기 힘들다.
그리고 txt 파일을 csv파일로 가져올때 옵션들을 만져줘야 가져와진다.
- 데이터를 살펴본 후 불명확한(의미가 불분명, 공백 등) 컬럼 조정
- 전체 변경
- df.columns = ['', '', '', . . .]
- 부분 변경
- dict로 매칭하여서 rename() 함수 활용
{ '최초컬럼명':'신규컬럼명' }
- 전체 변경
데이터를 차근차근 본 후 의미가 이상한 컬럼은 수정해줘야한다, 전처리의 과정
부분만 변경하려면 dict로 매칭하여서 rename()함수를 사용한다.

df.rename(columns={
내용
})
함수를 사용해서 컬럼명을 변경해준 모습이다, 그저 컬럼명 변경만 실습한것이라서 데이터의 내용은 배제하였다.
데이터 분석 EDA 시각화
개요
- 목적
- 정보, 메세지를 전달하기 위해, 글보다는 짧고, 간단한, 명료한 내용이 정리된 시각화된 자료가 더 임팩트가 큼
- 시각화 도구를 이용하여 이를 구현
- 장점
- 컬럼간 관계 발견
- 데이터에 숨겨진 트렌드 찾을 수 있음
- 핵심을 전달하는 데이터 스토리텔링 구성 가능
- 의사 결정에 도움을 줌
- 분석 목적
- 데이터에 대한 통찰(이 데이터는 무엇을 설명하고 있는가)
라이브러리 소개
- 파이썬 계열
- matplotlib부터 파생
- js 계열 (웹으로 표현, 인터렉티브 지원)
- D3, chart.js, . . .
- 솔루션
- Tableau, PowerBI
- 스토리텔링, 대시보드, 등등 구성 -> 의사결정을 위한 PPT까지 진행 시킬수 있음
- AI 솔루션 제공
- Tableau, PowerBI

한글처리
- 코랩에서 진행할 경우 한글 폰트가 없기 때문에 차트에 한글 깨짐 (로컬PC는 관계 없음)
- 아래 내용 실행 후 재실행 (그래야 한글폰트를 인식함)
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
패키지(라이브러리)별
matplotlib
- https://matplotlib.org/
- Matplotlib: Visualization with Python
- 파이썬의 시각화 도구 중 가장 기본, 대부분 이를 기반으로 커스텀되어있다.
선형차트 (Linear)
- 선으로 데이터를 표현
- 시계열데이터에서
- 금융, 센서, 로그, . . .
- x축 시간
- 주기성(frequency)
- 시계열데이터에서
arange() 함수로 0~12까지 0.01 간격으로 값을 만들었다.




seaborn
- seaborn: statistical data visualization
- Seaborn is a Python data visualization library based on matplotlib. It provides a high-level interface for drawing attractive and informative statistical graphics.
- https://seaborn.pydata.org/
- 주요 차트
- 6개 중점 차트 (회귀, 등고선, 박스 플롯, 산포행렬등,. . .)

더미데이터 샘플



더미데이터의 '범주형' 컬럼의 고유값들을 확인한다, 이 값으로 묶여야 하니까
만약 컬럼이 수치형인 경우에는 인덱싱으로 표현하여 고유값을 추출해야한다.
- 분석 예상 시나리오
- RAW 데이터가 충분히 존재해야함
- 핵심은 데이터
- 요일별 매출 분석 (요일 vs 매출 상관관계 분석) -> 요일별 전략 수립
- 성별에 따른 tip 분석
- 서빙 직원들의 서빙 전략 상이해질수 있음
- 흡연여부에 따른 매출은 어떻게 다른가?
- 흡연 vs 매출 상관관계 분석 -> 전략 수립
- 점심 및 저녁중 어느 쪽이 더 매출이 높은가?
- 직원 배치 등 고정비에 대한 전략 수립 가능
- RAW 데이터가 충분히 존재해야함
Boxplot
- 범주형 데이터 시각화 도구
- 특징
- 1, 2, 3, 4분위수 제공
- 최소, 25%, 50%, 75%, 최대 제공
- 이상치 표현 -> 자동 시각화
- 여러가지 기법 존재 (차후 ML에서 확인)
- 본 차트에서는 공식으로 계산 (4분위수)
- IQR = Q3(75%) - Q1(25%)
- 최대값 = Q3 + (1.5*IQR)
- 최소값 = Q1 - (1.5*IQR)
- 이상치는 최대값보다 크거나, 최소값보다 작으면 판정


boxplot을 사용해서 요일별로 요일별 총 매출을 시각화했다.
토요일이 제일 매출이 높을것으로 예상, 이 때 목요일,금요일은 누가 매출이 더 높을지 잘 모른다.

같은 데이터를 흡연 여부로 한번 더 갈라줬다.
3번째 요소를 부여할때에는 무조건 범주형으로 넣어야 한다.
주말에는 흡연자가, 평일에는 비흡연자가 매출이 더 높은것을 확인할 수 있다.

박스플롯위에 다른 시각화 데이터를 덮어주었다.
swarmplot을 추가하여 데이터의 개수도 얼추 확인이된다.
이로 인해 금요일이 확실히 매출이 더 적다는 인사이트 또한 도출할 수 있다.
산점도,산포도,Scatter
- 특징
- 변수(컬럼)간 (통상2개) 관계 묘사
- 데이터는 연속형
- 회귀(머신러닝의 지도학습분석방법중 하나)


수치형 데이터인 total_bill 과 tip 의 상관관계를 분석하기 위해서 해당 그래프를 사용해서 시각화하였다
총 지불금액이 높을수록 팁 또한 올라갔고 회귀선 기준으로 40달러 결제시 보통 5달러정도 기대한다.

흡연 데이터도 추가하여 올렸다. 이로 인해 흡연자, 비흡연자 등 주문금액과 팁에 차이가 있는 사실 또한 도출해낼 수 있 다.
- 위의 시각화 및 분석의 결과로 다음과 같이 총 결제액과 팁간의 관계를 규정
- total_bill = a * tip + b (단순 선형 회귀)
- a, b의 값만 알면 고객의 결제액에 따른 팁을 예측할 수 있음
- 통계적 계산
- 머신러닝/딥러닝 계산 -> 학습을 통해서 계산할 수 있음 (학습의 결과 = 오차를 최소로 하는 a,b:파라미터)를 구하는 과정=학습
상관관계
- 정의
- 한 변수의 변화에 따른 다른 변수의 전도/방향성을 예측하는 분석 기법
- 두 변수간의 관계를 파악하는 기법
- 지표
- 피어슨 상관관계 (등간척도기준)
- 스피어만 상관관계 (서열척도기준)
- 척도
- 관측 대상의 속성을 측정, 그 값을 수치로 표현
- 종류
- 질적
- 명목척도 : 남자 1, 여자 2,단순 부여
- 서열척도 : 중간고사 1등, 2등
- 스피어만 상관계수 사용
- 양적
- 등간척도 : 관찰대상의 속성을 크기로 표현함
- 리커드 척도(이산형)
- a:1점, b:2점, c:3점 -> 평점
- c가 가장 호감도가 높다
- 리뷰 별 1개, 2개, . ..
- 별 5개가 가장 좋다
- 피어슨 상관관계 사용
- 리커드 척도(이산형)
- 비율척도 (연속형)
- 무게, 시간, 거리, . . .
- 피어슨 상관관계 사용
- 등간척도 : 관찰대상의 속성을 크기로 표현함
- 질적



1. 흡연자와 비흡연자를 나눠준다
2. 상관관계 = corr함수를 사용해서
흡연자의 팁과 총 결제액간의 상관관계를 분석한다.
이 때 값이 0.48xxxx이므로 얘는 상관관계가 '있다'
비흡연자의 팁과 총 결제액간의 상관관계는
'크다'
오늘의 수업은 여기까지