💻STUDY/PYTHON STUDY

11주차 수업 복습

coldNoodlePigeon 2021. 5. 22.

데이터과학 기초 

 

Matplotlib

 

파이썬을 이용하여 주어진 데이터를 정적, 동적, 대화식 그래프 형식으로 시각화해주는 통합 라이브러리 패키지.

(기본적으로 선그래프, 막대그래프, 점그래프 지원)

 

import matplotlib.pyplot as plt
B=[2,4,6,8,10]
plt.plot(B)
plt.show() 

x축에 해당되는 값이 지정되지 않는 경우, x축에 넘파이 배열의 인덱스가 할당되고, y축에는 넘파이 배열의 값이 할당.

따라서 (0,2) (1,4) (2,6) (3,8) (4,10) 의 점들을 연결하는 막대그래프가 생성됨

 

import matplotlib.pyplot as plt
X=[13,20,30,40,50,60,70,80,90,100]
Y=[0,2,1,3,2,4,7,12,15,5]
plt.plot(X,Y)
plt.xlabel("score")
plt.ylabel("count")
plt.show() 

위 경우는 x축과 y값을 지정하여 그린 경우이다. plt.xlabel(), plt.ylabel() 을 통하여 레이블을 지정하는 것도 가능!

 

import matplotlib.pyplot as plt
X=[13,20,30,40,50,60,70,80,90,100]
Y=[0,2,1,3,2,4,7,12,15,5]
plt.bar(X,Y)
plt.xlabel("score")
plt.ylabel("count")
plt.show()  

위 경우는 x축 y축 값을 지정 후, 막대그래프로 그린 경우이다. plt.bar(x,y)를 통해 그릴 수가 있다.

 

(#주의: plt.show()를 반드시 해야만 출력한 그래프를 눈으로 확인할 수가 있다) 

 

 

 

ex>  강수량 그래프 그리기

 

import matplotlib.pyplot as plt
X=[1,2,3,4,5,6,7,8,9,10,11,12]
Y2011=[9,29,15,110,53,405,1131,167,26,32,56,7]
Y2020=[61,53,16,17,112,40,270,676,182,0,120,5]
plt.plot(X,Y2011,label="2011")
plt.plot(X,Y2020,label="2020")
plt.xlabel("Month")
plt.ylabel("Precipitation(mm)")
plt.legend(loc="upper left")
plt.title("Precipitations in Seoul")
plt.show()

위 코드 실행 결과 화면

 

 

NumPy (Numerical Python)

 

행렬 계산이 편리한 파이썬 라이브러리 패키지. 기계학습 응용 프로그램에서 데이터는 NumPy가 제공하는 다차원 배열(행렬) 상에서 저장되어 처리된다.

 

 

 넘파이 1차원 배열 

 

>>> import numpy as np
>>> temp=[1,3,5,7,9]
>>> A=np.array(temp)
>>> A
array([1, 3, 5, 7, 9])
>>> A*2
array([ 2,  6, 10, 14, 18])
>>> A*0.3
array([0.3, 0.9, 1.5, 2.1, 2.7])
>>> A=A*0.3
>>> A
array([0.3, 0.9, 1.5, 2.1, 2.7])

 

배열 연산

 

자산에서 대출을 모두 공제한 후 자산 잔액을 계산하는 예제. 배열 원소 또는 배열 간에 수학 연산자 적용 가능. 

import numpy as np
asset=np.array([1000,2000,1500,900])
debt=np.array([300,1200,0,1500])
print("asset",asset)
print("debt",debt)

asset=asset-500
print("500 deducted each")
print("asset",asset) 

print("balance after debt deduction")
balance=asset-debt
print("balance",balance)
print("asset",asset)

print("balances over 1000")
print(balance>500)
asset=balance
debt=debt-debt
print("asset", asset[0],asset[1],asset[2],asset[3])
print("debt",debt)
#실행 결과
asset [1000 2000 1500  900]
debt [ 300 1200    0 1500]
500 deducted each
asset [ 500 1500 1000  400]
balance after debt deduction
balance [  200   300  1000 -1100]
asset [ 500 1500 1000  400]
balances over 1000
[False False  True False]
asset 200 300 1000 -1100
debt [0 0 0 0]

 

넘파이 arange

 

np.arange(start,stop,step)

배열의 범위를 의미, start에서 stop-1 범위까지 step 간격만큼 값을 생성하는 역할. (step 생략 시 디폴트 값은 1)

 

>>> num=np.arange(1,100)
>>> num
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
       35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
       52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
       69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
       86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
>>> odd=np.arange(1,100,2)
>>> odd
array([ 1,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33,
       35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67,
       69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99])
>>> even=np.arange(2,100,2)
>>> even
array([ 2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34,
       36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68,
       70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98])

 

 

ex> 넘파이로 구구단을 출력해보자!

 

import numpy as np
first=np.arange(2,10)
second=np.arange(1,10)
for i in range(0,first.size):
    print(second*first[i])
#실행 결과
[ 2  4  6  8 10 12 14 16 18]
[ 3  6  9 12 15 18 21 24 27]
[ 4  8 12 16 20 24 28 32 36]
[ 5 10 15 20 25 30 35 40 45]
[ 6 12 18 24 30 36 42 48 54]
[ 7 14 21 28 35 42 49 56 63]
[ 8 16 24 32 40 48 56 64 72]
[ 9 18 27 36 45 54 63 72 81]

 

구간 분할하기 

 

np.linspace(start,end,level) : start에서 end의 범위를 level-1 개수의 구간으로 분할 

ex> np.linspace(1,100,7) ==(100-1)/6 = 16.5 씩 자르기 

>>> import numpy as np
>>> a=np.linspace(1,100,7)
>>> print(a)
[  1.   17.5  34.   50.5  67.   83.5 100. ]

 

>>> import numpy as np
>>> a=np.linspace(50,1000)
>>> print(a)
[  50.           69.3877551    88.7755102   108.16326531  127.55102041
  146.93877551  166.32653061  185.71428571  205.10204082  224.48979592
  243.87755102  263.26530612  282.65306122  302.04081633  321.42857143
  340.81632653  360.20408163  379.59183673  398.97959184  418.36734694
  437.75510204  457.14285714  476.53061224  495.91836735  515.30612245
  534.69387755  554.08163265  573.46938776  592.85714286  612.24489796
  631.63265306  651.02040816  670.40816327  689.79591837  709.18367347
  728.57142857  747.95918367  767.34693878  786.73469388  806.12244898
  825.51020408  844.89795918  864.28571429  883.67346939  903.06122449
  922.44897959  941.83673469  961.2244898   980.6122449  1000.        ]

 

zero 배열 만들기

 

  • 1차원 배열 만들기 
>>> print(np.zeros(9))
[0. 0. 0. 0. 0. 0. 0. 0. 0.]

 

  • 2차원 배열 만들기
>>> print(np.zeros((5,5)))
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

(행,열) , 5x5 의 2차원 배열을 만들어 출력한다.

(주의!: (5,5) 전체를 괄호 안에 넣어서 전달해야 함!)

 

  • 3차원 배열 만들기
>>> print(np.zeros((3,4,5)))
[[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]]

4x5 행렬이 총 3개 생성된다. 

 

 

import numpy as np
x=np.full(2,5) #원소가 2개인 1차원 배열을 초기값 5로 생성
y=np.full((3,4),fill_value=1) #3행 4열 2차원 배열을 생성, 원소 초기값은 1
z=np.full((3,4,5),fill_value=3) #4행 5열 2차원 배열을 3개 생성, 원소 초기값은 3

print("ndim",x.ndim,y.ndim,z.ndim) #ndim: 특정 배열의 차원을 확인 할 수 있음 
print("shape",x.shape,y.shape,z.shape) #shape: 배열의 행렬 크기 확인 가능
print("size",x.size,y.size,z.size) #size: 원소의 총 개수 확인 가능
ndim 1 2 3
shape (2,) (3, 4) (3, 4, 5)
size 2 12 60

 

배열 행, 열 별 최대 최소값 찾기

 

import numpy as np
x=np.random.randint(10,size=(3,4)) #난수 (0~9) 로 3행 4열 배열 생성
print(x)

col_max=np.amax(x,axis=0) #각 열의 최대값
row_max=np.amax(x,axis=1) #각 행의 최대값
col_min=np.amin(x,axis=0) #각 열의 최소값
row_min=np.amin(x,axis=1) #각 행의 최소값
print()

print(col_max)
print(row_max)
print(col_min)
print(row_min)
print()

max_pos=np.argmax(x) #배열 원소 중 최대값의 위치 
min_pos=np.argmin(x) #배열 원소 중 최소값의 위치 
col_max_pos=np.argmax(x,axis=0) #배열의 각 열에서 최대값의 위치
row_min_pos=np.argmin(x,axis=1)  #배열의 각 행에서 최소값의 위치

print("max_pos", max_pos)
print("min_pos", min_pos)
print("col_max_pos", col_max_pos)
print("row_min_pos", row_min_pos)
[[0 9 6 6]
 [0 3 9 7]
 [1 6 3 9]]

[1 9 9 9]
[9 9 9]
[0 3 3 6]
[0 0 1]

max_pos 1
min_pos 0
col_max_pos [2 0 1 2]
row_min_pos [0 0 0]

 

배열의 합 구하기

 

import numpy as np
x=np.random.randint(10,size=5)
y=np.random.randint(10,size=(3,4))
x_sum=np.sum(x)
y_sum=np.sum(y)
col_mean=np.mean(y,axis=0)
row_mean=np.mean(y,axis=1)

print(x)
print(y)
print()
print(x_sum)
print(y_sum)
print(col_mean)
print(row_mean)
[6 5 8 2 0]
[[5 4 1 0]
 [5 5 9 9]
 [3 9 7 7]]

21
64
[4.33333333 6.         5.66666667 5.33333333]
[2.5 7.  6.5]

ex> 인구 통계 그래프 그리기 

 

import numpy as np
import matplotlib.pyplot as plt
gu=['강남', '강동', '강서', '관악', '구로', '노원', '동작', '마포', '서초', '성북', '송파', '양천', '영등포',
    '용산', '은평']
population=[55029,440390,598273,517334,439371,537303,408912,385925,435107,454744,
            682741,462285,400986,245185,484546]
area=[39.5, 24.59, 41.44, 29.57, 20.12, 35.44, 16.35, 23.85, 46.98, 24.57, 33.87, 17.41, 24.55, 21.87,
29.71]
np_gu=np.array(gu)
np_population=np.array(population)
np_area=np.array(area)
plt.bar(np_gu,np_population)
plt.ylabel("인구 (명)")
plt.show() 

 

여러가지 함수 동시에 그리기 

 

import numpy as np
import matplotlib.pyplot as plt

x=np.arange(1,10)
y0=np.log(x)
y1=x
y2=x**2
plt.plot(x,y0,x,y1,x,y2)
plt.show()

 

 

삼각함수 그리기

 

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0,4*np.pi,100)
y1=np.sin(x)
y2=np.cos(x)

plt.plot(x,y1,x,y2)
plt.show() 

 

 

Pandas 

빠르고, 융통성 있고, 사용하기 쉬운 데이터 분석과 조작을 지원하는 오픈 소스 파이썬 라이브러리.

넘파이와 달리 행과 열에 레이블을 부여하여 편리하게 데이터 조작이 가능

csv,xlsx,SQL 데이터베이스 등의 외부 파일 데이터를 읽어서 배열 OR 행렬에 저장토록 해줌. 다양한 연산 함수 제공

시리즈(series)는 같은 자료형의 데이터를 저장할 수 있는 1차원 배열

데이터 프레임(data frame)은 같은 자료형의 데이터를 저장하는 2차원 배열로 행, 열로 구성됨. 기능은 내부적으로 넘파이로 구현되어 있음. 

데이터프레임 행에 부여된 레이블 =index. 열에 붙여진 레이블은 column. 

판다스는 데이터 프레임에서 행렬에 대한 필터링, 정렬을 포함하는 다양한 연산 함수를 제공. 

 

 

시리즈(Series)

 

판다스로 만들어진 1차원 배열.

>>> import pandas as pd
>>> item=['Seoul','Tokyo','Paris','New York']
>>> city=pd.Series(item)
>>> print(city)
0       Seoul
1       Tokyo
2       Paris
3    New York
dtype: object

 

데이터 프레임 (Data Frame) 

 

행과 열이 있는 2차원 배열 테이블. 행에 index를 부여하지 않을 경우, 0~n-1의 일련번호가 부여됨.

 

>>> import pandas as pd
>>> item={'City':['Seoul','Tokyo','Paris','New York'],'Nation':['Korea','Japan','France','USA']}
>>> city=pd.DataFrame(item)
>>> print(city)
       City  Nation
0     Seoul   Korea
1     Tokyo   Japan
2     Paris  France
3  New York     USA

 

ex> 데이터 프레임에 인덱스 추가

>>> import pandas as pd
>>> item={'City':['Seoul','Tokyo','Paris','New York'],'Nation':['Korea','Japan','France','USA']}
>>> city=pd.DataFrame(item,index=['KR','JP','FR','US'])
>>> print(city)
        City  Nation
KR     Seoul   Korea
JP     Tokyo   Japan
FR     Paris  France
US  New York     USA

 

Pandas 이용하여 파일 읽기

 

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)

pop=pd.read_csv(r"C:\Users\user\Desktop\21-1\소웨이\실습11장\population.csv")
print(pop)
      기간    지역      인구  면적   인구밀도
0   2019   송파구  682741  34  20156
1   2019   강서구  598273  41  14438
2   2019   강남구  550209  40  13929
3   2019   노원구  537303  35  15162
4   2019   관악구  517334  30  17496
5   2019   은평구  484546  30  16308
6   2019   양천구  462285  17  26559
7   2019   성북구  454744  25  18505
8   2019   강동구  440390  25  17909
9   2019   구로구  439371  20  21837
10  2019   서초구  435107  47   9261
11  2019   동작구  408912  16  25003
12  2019   중랑구  402024  19  21736
13  2019  영등포구  400986  25  16334
14  2019   마포구  385925  24  16180
15  2019   광진구  366972  17  21507
16  2019  동대문구  363023  14  25537
17  2019   도봉구  335631  21  16245
18  2019  서대문구  323171  18  18335
19  2019   강북구  317695  24  13462
20  2019   성동구  308979  17  18327
21  2019   금천구  251820  13  19341
22  2019   용산구  245185  22  11213
23  2019   종로구  161869  24   6769
24  2019    중구  136488  10  13704

 

 

'💻STUDY > PYTHON STUDY' 카테고리의 다른 글

13주차 수업 복습  (0) 2021.06.03
12주차 수업복습  (0) 2021.05.29
10주차 수업 복습  (0) 2021.05.13
9주차 수업 복습  (0) 2021.05.09
8주차 배운거 복습  (0) 2021.04.28

댓글