728x90
반응형
- 리스트
- 복합 데이터 유형
- 서로 다른 데이터 유형도 가능
- 튜플
- 복합 데이터 유형
- 서로 다른 데이터 유형도 가능
- 읽기 전용 리스트
- 딕셔너리
- 쌍으로 만든 테이블 형식
- 키는 문자열과 숫자로
- 값은 모든 유형과 임의의 파이썬 객체
- 데이터 프레임을 딕셔너리로 만들면 데이터프레임의 열을 하나씩 쌓아가는 형태
- 데이터 프레임을 리스트로 만들면 데이터프레임의 행을 하나씩 쌓아가는 형태
- EDA
- 데이터 분석 이전에 데이터 전처리, 데이터 조작하는 과정
- 데이터 분석 순서
- 데이터 백업 -> 데이터 보기
- 열변수
- 행 데이터
- 인덱스
- 행번호
- 특정 조건 데이터 추출(행 데이터)
- 인덱스 읽기
- 행 번호 읽기
- 특정 행 범위 영역 선택
- 조건 이용 선택
- 특정 조건 선택
- 특정 조건 데이터 추출 (열 변수)
- 열 변수 추출
- 여러 개 열 변수 한 번에 추출하기
- 파생변수 만들기
- 열 변수 자료형 확인 및 변환
- 데이터 조작 관련 사이트
pandas.pydata.org/pandas-docs/stable/user_guide/10min.html
파이썬을 이용해 데이터 분석을 하기에 앞서 사용할 라이브러리를 소개한다.
- 판다스
- 엑셀의 단점을 보완하기 위해 만든 데이터 핸들링 패키지
- 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. 요약 정보 보기
#관련 라이브러리 불러오기
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
- loc
#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()
- 행,열 합계
- df.count()
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='고객번호')
- 데이터 프레임 변수 유형
- 변수
- 범주형 변수
- 명목 변수
- 서열 변수
- 연속형 변수
- 등간 변수
- 비율 변수
- 범주형 변수
- 범주형 변수
- 사칙연산의 의미가 없다
- 명목 변수
- 문자로 표현하는 변숫값
- 동일한 특성을 갖는 대상이 동일한 수치를 갖는 변수를 명목 데이터
- 서열 변수
- 변수에 순서가 있는 값
- 특성에 따라 순서대로 배열
- 그 순서에 따라 서열을 부여
- 명목 변수
- 사칙연산의 의미가 없다
- 연속형 변수
- 사칙연산이 가능
- 등간 변수
- 구간 데이터 (ex. 온도)
- 절대적 원점이 존재하지 않고, 비율의 의미가 존재하지 않는 데이터
- 비율 변수
- 절대적 기준점이 존재하고 비율계산이 가능한 데이터
- ex. 수능 점수
- 등간 변수
- 사칙연산이 가능
- 범주형
- 변수의 빈도와 전체 데이터 빈도를 확인해 전반적 분포를 이해
- 가장 빈도수가 높은 데이터와 가장 낮은 데이터를 기록
- 빈도분석
- 교차분석
#라이브러리 불러오기
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)
- 연속형 [기술통계]
- 데이터의 전반적인 특성을 이해하고 사칙연산이 가능
- 내용을 특정 짓는 몇 가지 대푯값으로 시각화하여 특징을 요약
- 데이터 중심 이해
- 평균
- 가장 잘 왜곡될 수 있는 값
- 전체 데이터의 중심을 대표하는지 확인해야 한다.
- 극단값은 평균에 넣으면 안된다.
- 중위수
- 평균
- 데이터 퍼짐 정도 이해
[개별 자료의 대표성 파악 - 평균을 중심으로 흩어진 정도 파악]
즉, 평균을 중심으로 흩어진 정도를 파악해 개별 관측치와 전체 평균과의 차이 확인- 분산
- 표준편차
- 범위
- 사분위수
- 데이터 중심 이해
#tips 데이터 유형 확인
#tips 데이터의 연속형(category) 변수는 total_bill, tip, size 3개
tips.dtypes
tips.describe()
728x90
반응형
'Computer Engineering > Big Data Analytics Using Python' 카테고리의 다른 글
[빅데이터 분석 프로젝트] 마크다운으로 타이타닉 탑승객의 생존률 보고서 작성하기 -Part 1 (0) | 2021.03.16 |
---|---|
[빅데이터 분석] 5. 데이터 클린징 (0) | 2021.03.15 |
[빅데이터 분석] 3. 데이터 준비 (0) | 2021.03.13 |
[빅데이터 분석] 2. 파이썬 주요 문법 정리 (0) | 2021.03.13 |
[빅데이터 분석] 1. 빅데이터 분석 개발환경 구축하기 (0) | 2021.03.13 |