19. 판다스 소개 및 데이터 불러오기

판다스란?

  • 파이썬에서 데이터분석을 할 때 가장 많이 쓰이는 라이브러리
  • 표 형태의 데이터를 다루는 다양한 기능을 제공
  • 데이터 가시화
  1. 엑셀, csv등 다양한 데이터 형식 지원
  2. 결측치 처리 기능
  3. 데이터 형태 바꾸기
  4. 데이터 삭제 및 추가
  5. 그룹화, 정렬, 결합
  6. 시계열 데이터
  7. 문자열 및 날짜/시간 지원

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')