파이썬 데이터 분석 _ pandas 라이브러리 활용 1 : Series / DataFrame
파이썬
1. 특징
1) 신속하고 효율적인 표현
- 행과 열 바꾸기 가능
- 실 세계 데이터 분석
2) 다양한 형태의 데이터 표현
- 서로 다른 형태의 데이터 표현 예) 시계열, 레이블 가진 데이터, 다양한 관측 데이터
3) Seiries : 1차원 행 구조 / DataFrame : 2차원 행렬 구조
4) 결측null 데이터 처리
- 데이터 추가 및 삭제 : 특정 행렬에 삽입과 삭제 및 추가 가능
- 데이터 정렬과 조작
2. 기능
1) 리스트, 딕셔너리, numpy 배열 등의 데이터를 DataFrame으로 변환
2) csv / xls 파일 등으로 작업
3) url을 통해 웹페이지의 csv, json과 같은 원격데이터 및 데이터베이스 등 분석
4) 데이터 보기 및 검사
- mean() : 특정 열의 평균
- corr() : 상관 관계
- count() : 열의 데이터 수
5) 필터, 정렬, 그룹화
- sort_values() : 정렬
- groupby() : 기준에 의해 몇 가지의 그룹화
6) 데이터 정제
데이터 누락 및 특정 값을 다른 값으로 일관 변경
3. 구조
1) Series 사용
1-1. Series 생성
kakao = Series([92600, 92400, 92100, 94300, 92300])
print(type(kakao))
사용할 List의 이름을 부여하고,
이름 = series([값1, 값2, 값3 ... 값n]) 의 형태로 생성.
각 값이 행에 삽입된 한개의 열 형태의 series가
별도의 index이 없이 0부터 index가 부여된 채 생성됨.
1-2. index를 부여한 Series 생성
#series의 index로 사용할 열 생성
idx = ['2024-01-02', '2024-02-06', '2024-03-02', '2024-04-07', '2024-06-08']
#series의 데이터로 사용할 list 생성 _ index와 데이터 수 일치
data = [92600, 92400, 92100, 94300, 92300]
#index와 데이터를 이용해 Series 객체 생성 _ 별도의 이름 부여 예) sample =
sample = Series(data, index=idx)
#한꺼번에 생성 가능
sample = Series([92600, 92400, 92100, 94300, 92300],
index=['2024-01-02', '2024-02-06', '2024-03-02', '2024-04-07', '2024-06-08'])
list 형태의 데이터 객체를 생성 후,
별도로 index로 사용할 list 형태의 열을 생성.
두 데이터를 하나의 series로 병합해 사용 가능.
1-3. index와 값 각각 추출
for data in sample.index:
print(data)
for data in sample.values:
print(data)
.index / .values를 이용해 각각 index와 값을 추출.
1-4. Series 간의 연산
mine = Series([10, 20, 30], index=['naver', 'kt', 'sk'])
friend = Series([10, 30, 20], index=['kt', 'naver', 'sk'])
#두 series를 더해 같은 index 별 병합
merge = mine+friend
sub = mine-friend
mul = mine*friend
div + mine/friend
#결과
'''
kt 30
naver 40
sk 50
dtype: int64
kt 10
naver -20
sk 10
dtype: int64
kt 200
naver 300
sk 600
dtype: int64
kt 2.000000
naver 0.333333
sk 1.500000
dtype: float64
'''
2) DataFrame 사용
주로 딕셔너리 사용해 각 열에 대한 데이터 저장
2-1. DataFrame 생성
#Dataframe 객체 생성을 위한 key : value의 구조의 dictionary 생성
raw_data = {'col0': [1, 2, 3, 4],
'col1': [10, 20, 30, 40],
'col2': [100, 200, 300, 400]}
#DataFrame 이름 = DataFrame(딕셔너리이름) 구조로 Dataframe 객체 생성
dataframe_data = DataFrame(raw_data)
print(dataframe_data)
dinctionary를 이용해 DataFrame객체를 생성 시,
dinctionary의 key가 DataFrame의 열 이름으로 자동 indexing.
dinctionary의 values에는 list로 0부터 정수로 각각 indexing.
#DataFrame의 컬럼은 Series 형태
print(type(dataframe_data['col0']))
#결과
'''
<class 'pandas.core.series.Series'>
'''
2-2. DataFrame의 index 변경
daeshin = {'open': [11650, 11100, 11200, 11100, 11000],
'high': [12100, 11800, 11200, 11200, 11500],
'low': [11600, 11050, 11120, 11450, 11450],
'close': [12350, 11540, 11540, 11500, 11300]}
#DataFrame의 열 이름 별도 설정 : columns = [list]
#부여한 열 이름 순서 변경하는 법 : columns = [dictionary의 key]
daeshin_day = DataFrame(daeshin)
daeshin_day2 = DataFrame(daeshin, columns=['open', 'low', 'close', 'high'])
#list 생성하여 DataFrame의 index 설정 : index = [list]
#단, 열(dictionary의 key)의 데이터(dictionary의 value) 갯수, 즉 행의 숫자와 동일
daeshin_index = ['21.12.01', '21.12.02', '21.12.03', '21.12.04', '21.12.05']
daeshin_day3 = DataFrame(daeshin, columns=['open', 'low', 'close', 'high'],
index=daeshin_index)
2-3. DataFrame의 데이터 추출
#DataFrame의 데이터 추출 1 : 열 이름 이용 _ 해당 열의 각 행의 값
print(daeshin_day3['open'])
#결과
'''
21.12.01 11650
21.12.02 11100
21.12.03 11200
21.12.04 11100
21.12.05 11000
Name: open, dtype: int64
'''
#DataFrame의 데이터 추출 2 : index 이용 _ 해당 행의 각 열의 값
print(daeshin_day3['21.12.01' : '21.12.05'])
#결과
'''
open low close high
21.12.01 11650 11600 12350 12100
21.12.02 11100 11050 11540 11800
21.12.03 11200 11120 11540 11200
21.12.04 11100 11450 11500 11200
21.12.05 11000 11450 11300 11500
'''