본문 바로가기

Computer Engineering/Big Data Analytics Using Python

[빅데이터 분석] 4. 데이터 보기

반응형
  • 리스트
    • 복합 데이터 유형
    • 서로 다른 데이터 유형도 가능
  • 튜플
    • 복합 데이터 유형
    • 서로 다른 데이터 유형도 가능
    • 읽기 전용 리스트
  • 딕셔너리
    • 쌍으로 만든 테이블 형식
    • 키는 문자열과 숫자로
    • 값은 모든 유형과 임의의 파이썬 객체
  • 데이터 프레임을 딕셔너리로 만들면 데이터프레임의 열을 하나씩 쌓아가는 형태
  • 데이터 프레임을 리스트로 만들면 데이터프레임의 행을 하나씩 쌓아가는 형태 

 

  • EDA
    • 데이터 분석 이전에 데이터 전처리, 데이터 조작하는 과정

 

  • 데이터 분석 순서
    • 데이터 백업 -> 데이터 보기

 

  • 열변수
  • 행 데이터
    • 인덱스
    • 행번호

 

  • 특정 조건 데이터 추출(행 데이터)
    • 인덱스 읽기
    • 행 번호 읽기
    • 특정 행 범위 영역 선택
    • 조건 이용 선택
    • 특정 조건 선택
  • 특정 조건 데이터 추출 (열 변수)
    • 열 변수 추출
    • 여러 개 열 변수 한 번에 추출하기
    • 파생변수 만들기
    • 열 변수 자료형 확인 및 변환
  • 데이터 조작 관련 사이트

pandas.pydata.org/pandas-docs/stable/user_guide/10min.html

 

10 minutes to pandas — pandas 1.2.3 documentation

This is a short introduction to pandas, geared mainly for new users. You can see more complex recipes in the Cookbook. Time series pandas has simple, powerful, and efficient functionality for performing resampling operations during frequency conversion (e.

pandas.pydata.org


파이썬을 이용해 데이터 분석을 하기에 앞서 사용할 라이브러리를 소개한다.

 

  • 판다스
    • 엑셀의 단점을 보완하기 위해 만든 데이터 핸들링 패키지
    • 2차원 정형 데이터 처리에 사용된다.
    • 넘파이 기반의 데이터 핸들링 도구
설치 : pip install pandas
사용 : import pandas as pd

판다스는 기본적으로 2차원 행과 열로 이루어진 데이터 구조를 데이터프레임으로 제공한다.

또한 1차원 자료구조 시리즈, 3차원 자료구조 패널을 지원한다.


  • 시리즈
    • 모든 데이터 유형 저장가능한 1차원 레이블이 지정된 배열
    • 인덱스와 쌍으로 이루어진 데이터로 구성
    • 딕셔너리 리스트 튜플 등으로 생성
#리스트로 만들기 사례
import pandas as pd
sd1 = pd.Series(['Dog', 'Cat', 'Tiger', 'Lion', 'Monkey'], index=['0', '1', '2', '3', '4'])

#시리즈 데이터 출력
sd1

1. 딕셔너리로 만들기

2. 리스트로 만들기

3. 튜플로 만들기


  • 데이터 프레임
    • 엑셀 스프레드시트 형태의 행과 열 자료구조
    • 여러 개 시리즈의 합
    • 판다스의 기본구조
  • 데이터프레임을 딕셔너리와 리스트로 생성하는 데 차이점
    • 딕셔너리
      • 열을 하나씩 쌓아가는 형태
    • 리스트
      • 행을 하나씩 쌓아가는 형태
    • 차이
      • 딕셔너리로 만들면 데이터프레임의 열을 하나씩 쌓아가는 형태
      • 리스트로 만들면 데이터프레임의 행을 하나씩 쌓아가는 형태

1. 딕셔너리로 만들기

2. 리스트로 만들기

 

  • EDA [Exploratory Data Analysis]
    • 데이터를 가공하는 과정 [데이터 전처리, 데이터 조작]
  • 데이터프레임 조작
    • 데이터를 가공하는 과정[데이터 전처리, 데이터 조작]후 데이터를 사용한다.
    • 행이 증가한다. -> 분석해야할 자료가 많아진다.
    • 열이 증가한다. -> 분석해야할 변수가 많아진다.
  • 깔끔한 데이터
    1. 각 변수가 칼럼으로 구성되어 있다.
    2. 각 관측 데이터가 행이 된다.
    3. 관측 단위에 대한 형태가 테이블로 구성된다.
  • 데이터 프레임 확인

1. 요약 정보 보기

#관련 라이브러리 불러오기
import pandas as pd
import seaborn as sns

#데이터 준비 시본에 내장된 팁 데이터
tips = sns.load_dataset("tips")
tips

#데이터프레임의 기본 정보 확인
tips.info()

2. 행 상위, 하위 데이터 추출 [빅데이터 분석시 가장 중요한 기능 like SELECT문]

#데이터프레임에서 상위 5개 데이터 추출
tips.head()

#데이터프레임에서 상위 2개 데이터 추출
tips.head(2)
#데이터프레임에서 하위 데이터 추출
tips.tail()

#데이터프레임에서 하위 3개 데이터 추출
tips.tail(3)

  • 행 데이터 [박스 안이 인덱스이며, 행 번호는 보이지 않는 일련번호]
    • loc
      • 인덱스 기준으로 행 데이터 읽기 -> ['A' : 'D'] -> 'A', 'B', 'C', 'D'
    • iloc
      • 행 번호를 기준으로 행 데이터 읽기 -> [1:3] -> 1, 2
#2번 인덱스를 삭제하고 새로운 데이터프레임 tips1 생성
tip1 = tips.drop([2])
tips1

#행 번호 읽기로 세번째 데이터를 가지고 옵니다.
tips1.iloc[2]

#2번 인덱스가 삭제되어 에러가 발생합니다.
tips1.loc[2]

 

1. 인덱스 읽기

2. 행번호 읽기 [음수를 사용해 데이터 추출 가능]

3. 특정 행 범위 영역을 선택

->행 번호를 이용하여 0,1,2번째 행을 가져오기

->행 번호를 이용하여 선택하기

->인덱스를 이용하여 선택하기

->인덱스를 이용하여 0부터 3까지의 컬럼 'sex'와 컬럼 'day' 가져오기

-> 특정 인덱스 값의 컬럼 'sex'와 컬럼 'day' 가져오기

-> 특정 인덱스 값과 특정 컬럼에 있는 값 가져오기 [at이용 가능]

  • 행과 열 동시에 선택하는 방법
    • 행 번호 기준 행과 열 데이터 선택
      -> 행 번호 3:5로 네 번째 행과 다섯 번째 행 선택하고, 열은 0:2로 첫 번째 열과 두 번째 열 선택
    • 인덱스 기준 행과 열 데이터 선택
      -> 두 번째, 세 번째, 다섯 번째 행과, 첫 번째와 세 번째 열을 선택
    • ':' 슬라이스를 이용해 행 또는 열 전체 선택
      -> 1:3, :
      -> :, 1:3
    • 값 하나 선택 하는 방법 [특정 행과 열을 지정]
      -> iloc
      -> iat

4. 조건을 이용하여 선택하기

5. 특정 조건 선택

  • 열 변수

1. 열 변수 추출

2. 여러 개 열 변수 한 번에 추출하기

3. 파생변수 만들기 [목적을 위해 만드는 유도변수]

4. 열 변수 자료형 확인 및 변환

  • 카테고리형과 문자열의 차이
    • 범주형 데이터는 카테고리형으로 지정하는 것이 분석 시 용량과 속도면에서 효율적이다.

  • 데이터 조작
    • df.count()
      • 개수 확인
    • df.index
      • 인덱스 보기
    • df.colums
      • 변수 보기
    • df.values
      • 데이터 보기
    • df.sort_values()
      • 오름차순
    • df.sort_values(ascending=False)
      • 내림차순
    • df.sum()
      • 행,열 합계

1. 데이터 개수 확인

2. 기타 보기

3. 정렬

4. 행/열 합계


  • 데이터 연결과 병합
    •  
    • 데이터 연결
      • 인덱스 값 중복가능
      • concat 명령으로 기준 열 없이 데이터 연결 가능
      • 데이터 구조가 같아야 한다.
      • 병합할 행 데이터가 분석에 의미가 있을 때 병합한다
    • 데이터 병합
      • 키는 중복되지 않은 구분값
      • 공통 열 혹은 인덱스를 기준으로 두 개의 테이블을 병합
      • 기준이 되는 열과 행의 데이터가 키가 된다.
      • inner join 방식을 사용
#시리즈를 새로운 행으로 연결합니다.
import pandas as pd
s1 = pd.Series([0,1], index=['A', 'B'])
s2 = pd.Series([2,3,4], index=['c','d','e'])

s1

s2

pd.concat([s1, s2])

#열으로 데이터 열을 연결하고 싶으면 axis=1로 인수를 설정합니다.
df1 = pd.DataFrame([['Dog', '3'], ['Brid','10'], ['Tiger','6'], ['Moose', '3']], index=['0','1','2','3'],columns=['동물','나이'])
df1

df2=pd.DataFrame([['집','0'], ['초원', '0'],['수풀','0'],['초원','1']], index=['0','1','2','3'], columns=['사는곳','뿔의 개수'])
df2

pd.concat([df1, df2], axis=1)
import pandas as pd

#병합용 데이터프레임 생성
df1 = pd.DataFrame({ '고객번호': [1001, 1002, 1003, 1004, 1005, 1006, 1007],
	'이름': ['강감찬', ' 홍길동', '이순신', '장보고', '유관순', '신사임당', '세종대왕']}, columns=['고객번호', '이름'])
df1
    
df2= pd.DataFrame({'고객번호': [1001, 1001, 1005, 1006, 1008, 1001], '금액': [10000, 20000, 15000, 5000, 10000, 30000]},
columns=['고객번호', '금액'])
df2
#inner join
pd.merge(df1, df2, on='고객번호')
pd.merge(df1, df2, how='inner' on='고객번호')

#Full join 방식은 키 값이 한쪽에만 있어도 데이터를 출력
pd.merge(df1, df2, how='outer', on='고객번호')

#left, right 방식은 각각 첫 번째, 혹은 두 번째 데이터프레임의 키 값을 모두 보여준다.
pd.merge(df1, df2, how='left', on='고객번호')

pd.merge(df1, df2, how='right', on='고객번호')

  • 데이터 프레임 변수 유형
  • 변수
    • 범주형 변수
      • 명목 변수
      • 서열 변수
    • 연속형 변수
      • 등간 변수
      • 비율 변수
  1. 범주형 변수
    • 사칙연산의 의미가 없다
      1. 명목 변수
        • 문자로 표현하는 변숫값
        • 동일한 특성을 갖는 대상이 동일한 수치를 갖는 변수를 명목 데이터
      2. 서열 변수
        • 변수에 순서가 있는 값
        • 특성에 따라 순서대로 배열
        • 그 순서에 따라 서열을 부여
  2. 연속형 변수
    • 사칙연산이 가능
      1. 등간 변수
        • 구간 데이터 (ex. 온도)
        • 절대적 원점이 존재하지 않고, 비율의 의미가 존재하지 않는 데이터
      2. 비율 변수
        • 절대적 기준점이 존재하고 비율계산이 가능한 데이터
        • ex. 수능 점수
  • 범주형
    • 변수의 빈도와 전체 데이터 빈도를 확인해 전반적 분포를 이해
    • 가장 빈도수가 높은 데이터와 가장 낮은 데이터를 기록
      1. 빈도분석
      2. 교차분석
#라이브러리 불러오기
import pandas as pd
import seaborn as sns

#데이터 준비
tips = sns.load_dataset("tips")

#데이터 보기
tips

#tips 데이터 유형 확인
#tips 데이터의 범주형 (category) 변수는 sex, smoker, day, time 4개

tips.dtypes

#성별 범주형 빈도분석
tips['sex'].value_counts()

#요일별 범주형 빈도분석
tips['day'].value_counts()

#성별, 요일별 교차분석
pd.crosstab(tips['sex'], tips['day'])

#여백 또는 누적값 cumulatives
pd.crosstab[tips['sex'], tips['days'], margins=True)

#전체 빈도 비율 확인
pd.crosstab(tips['sex'], tips['day']).apply(lambda r: r/len(tips), axis=1)
  •  연속형 [기술통계]
    • 데이터의 전반적인 특성을 이해하고 사칙연산이 가능
    • 내용을 특정 짓는 몇 가지 대푯값으로 시각화하여 특징을 요약
      1. 데이터 중심 이해
        1. 평균
          • 가장 잘 왜곡될 수 있는 값
          • 전체 데이터의 중심을 대표하는지 확인해야 한다.
          • 극단값은 평균에 넣으면 안된다.
        2. 중위수
      2. 데이터 퍼짐 정도 이해
        [개별 자료의 대표성 파악 - 평균을 중심으로 흩어진 정도 파악]
         즉, 평균을 중심으로 흩어진 정도를 파악해 개별 관측치와 전체 평균과의 차이 확인
        1. 분산
        2. 표준편차
        3. 범위
        4. 사분위수
#tips 데이터 유형 확인
#tips 데이터의 연속형(category) 변수는 total_bill, tip, size 3개
tips.dtypes

tips.describe()

 

반응형