19. 판다스 소개 및 데이터 불러오기
판다스란?
- 파이썬에서 데이터분석을 할 때 가장 많이 쓰이는 라이브러리
- 표 형태의 데이터를 다루는 다양한 기능을 제공
- 데이터 가시화
- 엑셀, csv등 다양한 데이터 형식 지원
- 결측치 처리 기능
- 데이터 형태 바꾸기
- 데이터 삭제 및 추가
- 그룹화, 정렬, 결합
- 시계열 데이터
- 문자열 및 날짜/시간 지원
open() 함수
- 쓰기
1
2
3
| f = open('hello.txt', 'wt')
f.write('hello')
f.close()
|
- 읽기
1
2
3
4
| f = open('hello.txt', 'rt')
data = f.read()
f.close()
print(data) # hello
|
- 추가
1
2
3
| f = open('hello.txt', 'at')
f.write('hello')
f.close()
|
20. 시리즈와 데이터프레임 이해하기
표 형태의 데이터
- 열: 시리즈
표: 데이터프레임
- 시리즈
- 데이터프레임에서 각각의 열
- 판다스의 pd.Series() 함수로 생성
- 딕셔너리를 사용하여 시리즈 만들기
1
2
| dic = {"a":1, "b":2, "c":3}
s = pd.Series(dic)
|
1
2
| box = ['홍길동', '이순신', '아이유']
s = pd.Series(box, index=['가', '나', '다'])
|
- 시리즈 행 이름 확인
- 시리즈 값 확인
- 딕셔너리로 데이터프레임 만들기
1
2
3
4
| dic = {'이름':['홍길동', '이순신','아이유'],
'성별':['남자', '남자', '여자'],
"나이":[40,50,20]}
pd.DataFrame(dic, index = ['A', 'B', 'C'], columns=['성별', '나이', '이름'])
|
- 리스트로 데이터프레임 만들기
1
2
| box = [['홍길동', '남자', 40], ['이순신', '남자', 50], ['아이유', '여자', 20]]
pd.DataFrame(box, columns=['이름', '성별', '나이'])
|
21. 판다스 통계 함수 맛보기
Groupby 함수 소개
- 판다스에서 제공하는 데이터프레임을 집단별로 나누어주는 함수
- 각 집단별로 통계값을 구할 때 유용하게 사용 가능
통계 함수 | 설명 |
---|
count | 누락값을 제외한 데이터 수 |
size | 누락값을 포한한 데이터 수 |
mean | 평균 |
std | 표준편차 |
min | 최소값 |
max | 최대값 |
sum | 전체 합 |
var | 분산 |
describe | 요약 통계량 |
first | 첫번째 행 |
last | 마지막 행 |
1
2
| import pandas as pd
df = pd.read_csv('gapminder.tsv', sep='\t') # 기본값 sep=','에서 \t로 바꾼다
|
1
2
| result = df.groupby('집단화하고싶은열이름')['보고싶은열이름'].mean() # 평균치
result.plot()
|
22. 시리즈와 데이터프레임 다루기
데이터프레임에서 열에 접근하기
데이터프레임에서 행, 열에 접근하기
1
2
3
4
5
| loc[0]
iloc[0]
loc[[0. 10, 100, 1000]]
iloc[[0, 10, 100, 1000]]
|
데이터프레임에서 원하는 행만 추출하기
1
2
3
| df[조건]
df[(조건1) & (조건2)]
df[(조건1) | (조건2)]
|
데이터프레임의 머리, 꼬리부분 추출
1
2
3
4
5
6
7
| df.head()
df.head(n=10)
df.head(10)
df.tail()
df.tail(n=10)
df.tail(10)
|
데이터프레임 확인
1
2
3
4
| df.shape # 모양 확인
df.columns # 열 이름 확인
df.dtypes # 열 자료형 확인
df.info() # 정보 확인
|
시리즈 통계 함수
1
2
3
4
5
6
| s.mean()
s.std()
s.median()
s.describe()
s.max()
s.min()
|
시리즈 중복 데이터 삭제하기
1
2
| s.drop_duplicates()
df.drop_duplicates()
|
시리즈 특정 값 바꾸기
시리즈 랜덤 샘플 추출
정렬하기
1
2
3
4
5
| s.sort_values()
s.sort_values(ascending=False)
s.sort_index()
s.sort_index(ascending=False)
|
시리즈 프레임화
시간 데이터 변환
1
| pd.to_datetime() # 문자열로 된 날짜 데이터를 시간 데이터로 변환
|
24. 데이터 시각화가 필요한 이유
- 만약 평균, 표준편차 등 수치만으로 봤을 떄, 완전 똑같은 4개의 데이터 집단이 있다면, 4개의 데이터 집단은 모두 같은 데이터 집단일까?
대표적인 파이썬 데이터 시각화 라이브러리
1
2
3
| import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
|
subplot
1
2
3
4
| ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
ax4 = fig.add_subplot(2, 2, 4)
|
25. matplotlib 라이브러리
- 그래프 라이브러리: matplotlib, seaborn, pandas
1
2
3
4
5
6
7
8
| import matplotlib.pyplot as plt
fig = plot.figure()
ax1 = fig.add_subplot(1, 1, 1)
ax1.그림함수(매개변수) # 그래프 그리기
ax1.set_title(제목) # 제목 지정
ax1.set_xlabel(x축 이름) # x축 이름 지정
ax1.set_ylabel(y축 이름) # y축 이름 지정
|
histogram
1
2
3
4
5
| fig = plt.figure() # 그림을 그리기 위한 도화지를 한장 준비해서 fig 변수에 할당
ax1 = fig.add_subplot(1,1,1) # 1행 1열에 1번쨰 자리
ax1.hist(tips['total_bill'], bins=10)
ax1.hist(tips['total_bill'], bins=20)
ax1.hist(tips['total_bill'], bins=30)
|
Scatter-plot
1
2
3
4
5
6
7
8
9
10
11
| fig = plt.figure() # 그림을 그리기 위한 도화지를 한장 준비해서 fig 변수에 할당
ax1 = fig.add_subplot(1,1,1) # 1행 1열에 1번쨰 자리
ax1.scatter(tips['total_bill'], tips['tip'])
ax1.set_xlabel("TOTAL BILL")
ax1.set_ylabel("TIP")
ax1.set_title("SCATTER")
|
1
2
3
4
5
6
7
8
9
10
11
| fig = plt.figure() # 그림을 그리기 위한 도화지를 한장 준비해서 fig 변수에 할당
ax1 = fig.add_subplot(1,1,1) # 1행 1열에 1번쨰 자리
ax1.scatter(tips['total_bill'], tips['tip'], c=tips['size']) # 색 추가
ax1.set_xlabel("TOTAL BILL")
ax1.set_ylabel("TIP")
ax1.set_title("SCATTER")
|
1
2
3
4
5
6
7
8
9
10
11
| fig = plt.figure() # 그림을 그리기 위한 도화지를 한장 준비해서 fig 변수에 할당
ax1 = fig.add_subplot(1,1,1) # 1행 1열에 1번쨰 자리
ax1.scatter(tips['total_bill'], tips['tip'], c=tips['size'], s=tips['size']*30) # 사이즈 추가
ax1.set_xlabel("TOTAL BILL")
ax1.set_ylabel("TIP")
ax1.set_title("SCATTER")
|
boxplot
1
2
3
4
5
6
7
| fig = plt.figure() # 그림을 그리기 위한 도화지를 한장 준비해서 fig 변수에 할당
ax1 = fig.add_subplot(1,1,1) # 1행 1열에 1번쨰 자리
male = tips[tips['sex']=='Male']
female = tips[tips['sex']=='Female']
ax1.boxplot([male['total_bill'], female['total_bill']])
|
26. seaborn 라이브러리 활용 그래프
- seaborn과 matplotlib는 연동이 가능하다
1
2
3
| fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax1 = sns.histplot(tips['total_bill'])
|
히스토그램
1
| sns.histplot(데이터, bins=막대기개수)
|
밀도 함수 그래프
1
2
| sns.kdeplot(데이터)
sns.kdeplot(데이터1, 데이터2)
|
특정 값 개수 그래프
산점도
1
| sns.lmplot(x='total_bill', y = 'tip', data=tips)
|
산점도 + 히스토그램
1
| sns.jointplot(x='total_bill', y='tip', data=tips)
|
평균 막대 그래프
1
| sns.barplot(x='time', y='total_bill', data=tips)
|
상자 그래프
1
| sns.boxplot(x='time', y='total_bill', data = tips)
|
바이올린 그래프
1
| sns.violinplot(x='time', y='total_bill', data=tips)
|
관계 그래프
단변량/이변량 그래프
- 단변량 / 일변량 그래프: 한개의 특성에 대한 표시
- 이변량 그래프 : 두개의 특성에 대한 상관관계를 나타냄
다변량 그래프 그리기
매개변수 hue: 색상 추가
다변량 그래프 그리기
매개변수 col
집단 별로 그래프 그리기
FacedGrid
집단별로 그래프 그리는 함수
기타
sns.set_stule(배경): 그래프 배경 설정
dartgrid, whitegrid, dart, white, ticks 등
27. pandas 라이브러리를 활용해서 그래프 그리기
히스토그램
1
2
3
| fig = plt.figure
ax = fig.add_subplot(1,1,1)
ax = tips['total_bill'].plot.hist()
|
1
2
3
| fig = plt.figure
ax = fig.add_subplot(1,1,1)
ax = tips[['total_bill', 'tip']].plot.hist(alpha=0.5, bins=20) # alpha: 투명도
|
밀도 함수 그래프
1
| ax = tips['tip'].plot.kde()
|
산점도
1
| ax = tips.plot.scatter(x='total_bill', y='tip')
|
육각형 모양 산점도
1
| ax = tips.plot.hexbin(x='total_bill', y='tip', gridsize=10)
|
원형 그림
1
| ax = df.plot.pie(y='mass')
|