Study Web Development

3월 30일

이전으로

Python

분석

pandas

Series
  1. 새 파일 s07_pandas2.py 생성
import pandas as pd

obj = pd.Series([10,20,30,40,50])
print(obj)
print('-'*3)

print(obj*10)
print('-'*3)

print(obj[obj>25])
print('-'*3)

print(obj>25)
print('-'*3)

pop = pd.Series([9765623,3441453,2948375],index=["서울","부산","인천"])
print(pop)
print('-'*3)

# items(): Series 객체에 있는 요소를 튜플 형태의 (index,value)로 반환
for i,v in pop.items():
    print('%s: %d명' % (i,v))
print('-'*3)

# Series 객체와 딕셔너리
pop = pd.Series({"서울":9765623,"부산":3441453,"인천":2948375},index=["서울","부산","인천","경기","광주"]) # 딕셔너리의 크기보다 인덱스를 더 많이 지정
print(pop) # 딕셔너리에 값이 없는 인덱스는 NaN이 됨

pop['광주'] = 149336 # NaN인 인덱스에 값 대입
print(pop)
print('-'*3)

print('광주시 인구: %.0f명' % pop['광주'])
DataFrame
생성, 조회
  1. 새 파일 s08_pandas3.py 생성
import pandas as pd

data = {"이름":["도로롱","실험용","관리자","테스트"],
        "아이디":["dororong","user","admin","test"],
        "비밀번호":["sleepy","1234","abcd","0000"]}

frame = pd.DataFrame(data)
print(frame)
print('-'*3)

member = {"이름":["바닐리치","바닐프티"],
          "나이":[10,13],
          "전화번호":["010-1234-5678","010-0000-0000"]}

frame = pd.DataFrame(member,columns=["이름2","전화번호","나이","주소"],index=["01","02"])
print(frame)
  1. 새 파일 s09_pandas4.py 생성
import pandas as pd

data = {"학교명":["가나","다라","마바","사아","자차"],
        "학급 수":[25,23,15,19,10],
        "학생 수":[620,600,550,580,400],
        "교사 수":[80,95,70,90,65]}

frame = pd.DataFrame(data,index=['01','02','03','04','05'])
print(frame)
print('-'*3)

# frame 객체에서 행 인덱스가 '02'이고 열 인덱스가 '학생 수'인 요소의 값
print(frame.loc['02','학생 수'])
print('-'*3)

# frame 객체에서 행 인덱스가 '04'이고 열 인덱스가 '학교명', '학급 수', '교사 수'인 DataFrame 객체 반환
print(frame.loc['04',['학교명','학급 수','교사 수']])
print('-'*3)
  1. 새 파일 s10_pandas5.py 생성
import pandas as pd

data = {"아이디":["test","admin","dororong","pika"],
        "구매 상품":["다이어리","스티커","중성펜","지우개"],
        "가격":[15000,4900,3300,900],
        "수량":[3,5,1,10],
        "구매일":['0101','0210','0303','0330']}

frame = pd.DataFrame(data)
print(frame)
print('-'*3)

# frame 객체에서 행 인덱스 2이고 열 인덱스 0인 요소의 값
print(frame.iloc[2,0])
print('-'*3)

# frame 객체에서 행 인덱스는 3이고 열 인덱스가 0(='아이디')과 1(='구매 상품')인 DataFrame 객체 반환
print(frame.iloc[3,:2])
print('-'*3)

# frame 객체에서 행 인덱스는 전체, 열 인덱스가 0(='아이디')과 4(='구매일')로 구성된 DataFrame 객체 반환
print(frame.iloc[:,[0,4]])
연산
  1. 새 파일 s11_pandas6.py 생성
import pandas as pd

scores = {'이름':['테스트','도로롱','실험용','불켜미','샹델라'],
          '국어':[95,97,90,94,87],
          '영어':[90,86,93,85,93],
          '수학':[85,88,89,88,99]}

frame = pd.DataFrame(scores)
print(frame)
print('-'*3)

frame2 = frame.iloc[:,[1,2,3]] # 연산을 위해 이름을 제외
print(frame2)
print('-'*3)

# 행 방향으로 요소 값의 합계
total = frame2.sum(axis=1)
# 행 방향으로 요소 값의 평균
avg = frame2.mean(axis=1)

print('이름 합계 평균')
for i in range(5):
    print('%s %d %.2f' % (frame.iloc[i,0],total.iloc[i],avg.iloc[i]))

시각화

Matplotlib

pip install matplotlib
선 그래프
  1. 새 PyDev 프로젝트 ch12-matplotlib 생성하고 새 파일 s01_mat.py 생성
import matplotlib.pyplot as plt

# y축에 사용될 변수
data = [20,30,40]
# x축에 사용될 변수
x = [1,2,3]

plt.plot(x,data)
plt.show()
  1. 새 파일 s02_mat2.py 생성
import matplotlib.pyplot as plt

# 선 그래프; x,y축은 리스트형 데이터
plt.plot(['test','admin','pika'],[85,88,90])
# 상단 중앙에 제목 표시
plt.title('English Score of three students')
# x축 레이블의 이름 설정
plt.xlabel('Student Name')
# y축 레이블의 이름 설정
plt.ylabel('Score')
# 화면에 출력
plt.show()
  1. 새 파일 s03_mat3.py 생성
import matplotlib.pyplot as plt
from matplotlib import rc

# '폰트'에 'Malgun Gothic' 지정
rc('font',family='Malgun Gothic') # 생략시 한글 출력이 안 됨
# 딕셔너리 자료형으로 폰트 스타일 생성
font1 = {'size':18,'color':'green'}

# 데이터
xdata = ['테스트','실험용','관리자']
ydata = [90,85,88]

# 선 그래프
plt.plot(xdata,ydata)
# 상단 중앙에 제목을 표시, 폰트 스타일 적용
plt.title('세 명의 국어 성적', fontdict=font1)
# x축 레이블의 이름 설정
plt.xlabel('이름')
# y축 레이블의 이름 설정
plt.ylabel('성적')
# 화면에 출력
plt.show()
  1. 새 파일 s04_mat4.py 생성
import matplotlib.pyplot as plt
from matplotlib import rc

# 한글이 표시될 수 있도록 폰트 지정
rc('font',family='Malgun Gothic')

# 데이터
xdata = ['학생용','실험용','테스트']
ydata1 = [90,85,88]
ydata2 = [83,88,91]

# 선 그래프
# label 옵션으로 그래프의 범례 지정
plt.plot(xdata,ydata1,label='국어')
plt.plot(xdata,ydata2,label='영어')
# 범례를 화면에 표시할 위치 지정
plt.legend(loc='upper center')
# 상단 중앙에 제목을 표시
plt.title('세 학생의 성적')
# 화면에 출력
plt.show()
스타일
옵션 값 스타일
- 실선(solid line)
-- 파선(dashed line)
-. 일점쇄선(dashed-dotted line)
: 점선(dotted line)
옵션 값 스타일
o 색이 채워진 원
x x
s 색이 채워진 사각형
d 색이 채워진 다이아몬드
* *
  1. 새 파일 s05_mat5.py 생성
import matplotlib.pyplot as plt
from matplotlib import rc

# 한글이 표시될 수 있도록 폰트 지정
rc('font',family='Malgun Gothic')

# 데이터
xdata = ['학생용','실험용','테스트']
ydata1 = [90,85,88]
ydata2 = [83,88,91]
ydata3 = [85,97,78]
ydata4 = [92,88,82]

# color, linestyle, marker 지정
plt.plot(xdata,ydata1,label='국어',color='red',linestyle='-',marker='o')
plt.plot(xdata,ydata2,label='영어',color='#00ffff',linestyle='--',marker='x')
plt.plot(xdata,ydata3,label='수학',color='magenta',linestyle='-.',marker='s')
plt.plot(xdata,ydata4,label='사회',color='#444444',linestyle=':',marker='d')
# 범례를 가장 적합한 위치에 표시
plt.legend(loc='best') # 우측 상단에 표시됨
# 제목 표시
plt.title('세 학생의 네 과목 성적')
# 화면 출력
plt.show()

다음으로