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