본문 바로가기
카테고리 없음

기공설 기말

by tonyhan18 2021. 6. 16.
728x90

1. 리스트

  • 빈 리스트 생성
  • letters=[] letters=list()
  • Indexing 범위
    • Positive indexing : 0 ~ n-1
    • n: . len( ) 함수는 리스트의 크기를 return
  • 대괄호 [ ] 안에 첨자(Index) 번호 입력하여 특정 요소의 값을 참조
    • [0] ~ [n-1] 즉, [0] ~ [len(리스트 변수)-1]
    slicing을 이용한 원소 제거/교체/추가

a[1:2] = ['a','b','c'] 1의 요소에 a,b,c를 넣으라는 의미이다.

slicing을 이용한 리스트 복사

그냥 b = a하면 같은 객체를 참조한다

리스트의 연산

  • Concatenation operation + (리스트의 연결연산)
  • Repetition Operation * (리스트의 반복 연산) : list * n 하면 list의 item을 n번 반복하여 새로운 list 생성

리스트의 연산 : in, not in

  • item in list
    • item이 list에 있으면 True 없으면 False
  • item not in list
    • item이 list에 없으면 True 없으면 False

리스트의 Method

리스트 외부 함수들

enumerate 는 for를 사용용
sorted(x)는 오름/내림차순을 설정할 수 있다는 차이점이 존재한다.
sum(x) : x의 원소 합을 반환(더할 수 없으면 Type Error)

2. 튜플

  • 빈 튜플 생성
    t=()
    t=tuple()

3. 집합(set)

  • 중괄호 {}를 사용하여 표시, 공집합도 가능
  • set()을 이용한 집합 자료형
    • set()의 괄호 안에 리스트, 문자열을 입력
    • ex)

4. 사전(dictionary)

1반 28명, 2반 30명, 3반 27명이라는 정보를 저장

반별로 학생수와 결석생 수(1반 2명, 2반 X, 3반 1명)를 저장

딕셔너리에 원소(쌍) 추가하기

딕셔너리에서 원소(쌍) 삭제하기

예)

사전 자료형 method

  • Key로 Value얻기 get()
    d.get(x): 사전 d에서 Key x에 대응되는 value를 반환
    d[x]와 동일한 결과값을 반환
  • 딕셔너리 메소드로 항목 삭제하기:
    Key로 원소 삭제하기 (pop)
    pop(x): key값 x에 대응되는 value를 반환, 해당 원소 쌍을 삭제
  • Key 리스트 만들기(keys)
    dict.keys() : 딕셔너리의 모든 Key를 모아서 dict_keys 객체를 리턴
    dict_keys 객체는 리스트를 사용하는 것과 차이가 없지만, 리스트의 메소드(append, insert, pop, remove, sort) 사용불가
    dict_keys 객체는 다음과 같이 사용할 수 있음
  • Value 리스트 만들기(values)
    dict.values()
    딕셔너리의 모든 value들을 모아서 dict_values 객체를 리턴
    dict_values 객체도 리스트를 사용하는 것과 동일하게 사용하면 됨
  • Key, Value 쌍 얻기
    dict.items()
    key와 value의 쌍을 튜플 (key, value)로 묶은 값을
    dict_items 객체로 반환
    예) 튜플로 묶여진 값을 변수 하나로 받음, 즉 튜플로 받는 경우
  • Key, Value 쌍 얻기 (items)
    예) 반복문을 사용한 사전 이용하기
    key와 vlaue 쌍이 튜플로 묶여진 것을 각각 다른 변수로 받는 경우
  • 반복문을 사용한 사전 이용하기
    value가 리스트 객체인 경우, 참조를 복사
    동일한 객체를 다른 이름으로 참조(7장. List 참고하세요!)
  • Key: Value 쌍 모두 지우기(clear)
    dict.clear() 는 딕셔너리 안의 모든 요소를 삭제
    즉, 빈 딕셔너리 { }로 만듬
    (비교) 빈 리스트 [ ], 빈 튜플 ()
  • 딕셔너리 Membership test:
    해당 Key가 딕셔너리 안에 있는지 조사하기(in)
    멤버십 테스트는 key만 가능

사전에 추가하거나 value 바꾸기

지역변수, 전역변수

참조 값에 의한 인수 전달

  • 리스트, 집합, 사전등이 인수로 지정된 경우,
    • 함수 안에서 매개변수의 값이 수정되면 인수에 영향을 줌 (매개변수와 인수가 동일한 객체를 가리키기 때문)
    • 함수 안에서 값을 수정하면 함수 밖에서도 보임 (return 불필요)

리스트, 집합, 사전은 기존에 배운것과 크게 다르게 함수에서 바꾸면 내부의 성분이 다 바뀌게 된다. 이것은 이 자료형이 다름 아닌 class 자료형이기 때문이다.

  • 리스트, 집합, 사전의 복사본을 인수로 지정하면
    • 복사본이 매개변수로 전달 됨
      따라서, 함수 안에서 값을 수정해도 원본은 관계없게 됨
  • 예) 원본 리스트의 복사본을 인수로 지정
    • test()에 인수 L[:] or L[::] 을 지정, 리스트의 복사본을 전달

복사값을 전달하면 실재 값이 바뀌지 않게 된다. 이때 매개변수는 L[:] 이나 L[::]으로 전달하면 된다.

정리

전역변수는 함수에서 참조만 가능 값을 바꿀려면 global을 사용해야 함
리스트, 튜플, 셋은 global없이도 그냥 막 바꿀 수 있음
이거 막을려면

turtle module

터틀 그래픽 모듈의 메소드(함수)

numpy

pip install numpy # install 명령어
import numpy as np # import 문

numpy

  • 객체안에는데이터와 메소드(코드), 속성 등이 포함
  • 파이썬 리스트를 사용하는 방법
    • numpy의 array() 함수에 리스트를 넣어 numpy 배열을 생성
    • 예) 리스트를 array() 함수에 넣어 1차원 배열을 생성
import numpy as np 

data = [1, 3, 5, 7, 9]
a = np.array( data ) # 1차원 배열 생성. ndarray 타입의 객체.
# a= np.array( range(1,10, 2) )와 동일
print(a.shape) # 차원의 크기를 튜플로 표시 (5, )
print( a )
  • 2차원 배열 생성하기, 배열 b는 2x3 배열
import numpy as np 

# 리스트를 사용하여 배열 생성
b = np.array( [ [1,2,3], [4,5,6] ] )
  • numpy에서 제공하는 함수를 사용하여 numpy 배열을 만드는 방법
    • zeros(행, 열) - 해당 배열에 모두 0을 집어 넣어 생성
    • ones(행, 열) - 모두 1
    • full(행, 열, 값) - 배열에 사용자가 지정한 값
    • eye(행) – 대각선은 1, 나머지는 0을 갖는 행과 열이 같은 배열 생성
    • arange(start,end,step) – 생성된 값을 가지고 배열 생성
    • linspace(x1, x2, n) – 구간 [x1, x2] 내의 균일한 간격의 값 n개로
      배열을 생성. 디폴트는 50개 : 어떤 특정 구간을 n개로 잘라서 배열을 생성하는 것을 이야기 한다.
    • reshape(행,열) – 배열을 지정한 형태로 변형하는 함수
  • numpy 슬라이싱
    • numpy 배열은 슬라이스(Slice)를 지원
    • 배열의 각 차원별로 슬라이스 범위를 지정 배열의 차원별 부분 집합을 구하는 것
  • 예)
  • data = [ # a[0:2, 0:3] [ 1, 2, 3, 4, 5], [ 5, 6, 7, 8, 10], [ 11, 12, 13, 14, 15] ]

a = np.array(data)
s1= a[ 0:2, 0:3 ]
print(s1) ; print()

s2 = a[ 1: , 0: ] # 행1과 열0의 슬라이싱 지정
print(s2)


- numpy 부울린 인덱싱 (boolean indexing)

```python
data = [ [ 1, 2, 3],
    [ 4, 5, 6], 
    [ 7, 8, 9] ] 

a = np.array(data)
# 부울린 인덱싱 배열 생성
# 배열 a 에 대해 성분을 2로 나누어 결과가 짝수면 True, 홀수면 False 
bool_i = ( a % 2 == 0 ) 
print( bool_i )
print( a[ bool_i ] )

# 더 간단한 표현
b= a[ a%2 == 0 ]
print(b) 
  • 배열에서 연산하기
  • a = np.array( [1,2,3] ) b = np.array( [4,5,6] ) # 각 원소 더하기 c = a + b # c = np.add(a, b) 동일 print(c) # [5 7 9] # 각 원소 빼기 c = a – b # c = np.subtract(a, b) print(c) # [-3 -3 -3] # 각 원소끼리 곱하기 c = np.multiply(a, b) # c = a * b print(c) # [4 10 18] # 각 요소 나누기 c = np.divide(a, b) # c = a / b print(c) # [0.25 0.4 0.5]
  • matrix 사이의 연산
    • dot() 함수
      • 행렬 사이의 내적 곱을 구하기 위해 사용
lst1 = [
    [1,2],
    [3,4]
]

lst2 = [
    [5,6],
    [7,8]
]

a = np.array(lst1)
b = np.array(lst2)
print(a, ’\n’)
print(b, ‘\n’)

# product 구하기
c = np.dot(a, b)
# c= a.dot(b)와 동일
print(c)
  • sum(배열, axis= n)
    • 각 배열 요소들을 더하는데 사용하는 함수
    • 선택옵션으로 axis 을 지정
      • axis가 1 이면 행끼리 더하고
      • axis가 0 이면 열끼리 더함
  • prod(배열, axis= n)
    • 각 배열 요소들을 곱하는데 사용
    • 선택옵션으로 axis 을 지정
      • axis가 1 이면 행끼리 곱하고
      • axis가 0 이면 열끼리 곱함

numpy 배열의 시각화 (그래프)

pip install matplotlib # install 명령

from matplotlib import pyplot as plt 
# 또는
import matplotlib.pyplot as plt
  • Matplotlib.pyplot 모듈의 함수
    • plt.plot(x축값, y축값, ‘option’)
      • 라인 플롯을 그리는 함수
      • X축 값과 Y축 값을 가지고 그래프를 그림
    • plt.bar(x축값, y축값)
      • 바차트를 그리는 함수
    • plt.scatter(x축값, y축값) – 산점도를 그리는 함수
    • plt.pie() – Pie 차트를 그리는 함수
    • plt.title(제목) - 그래프에 제목 붙이는 함수
    • plt.legend([라인1범례, 라인2범례, …. ]) - 각 라인에 대한 범례를 추가. 범례를 순서대로 지정
    • plt.show() – 그래프를 화면에 표시
    • 선의 색상, 스타일, 마커 등의 option을 지정하여 그래프를 그릴 수 있음
  • 선의 색상, 스타일, 마커 등의 option
  • (예) 선의 색상, 스타일, 마커 지정하기
  • import matplotlib.pyplot as plt plt.plot(x, y) plt.plot(x, y, ‘g--o’) # 색상, 스타일, 마커 지정 # green, dashed line, circle marker

pandas 개요

  • pandas를 설치하고, pandas를 import해야 사용
    • 윈도우 콘솔창(커맨드창)에서 install을 실행
      pip install pandas # install 명령어
    • 또는, 검색창에서 insatll을 실행
      pip install pandas # install 명령어
    • Pandas 라이브러리를 import하고 사용
      import pandas as pd # import 문
import pandas as pd

data = [1, 3, 5, 7, 9]
s = pd.Series(data) # 인덱스는 디폴트 값 사용
print(s)

  • 예) 인덱스 레이블을 지정하기 -> index = 속성으로 index를 지정가능
    import pandas as pd
    

data = [1, 3, 5, 7, 9]
s = pd.Series(data, index= [‘영희’,’순희’,’길동‘,’지성‘,’Bob’] )
print(s)


- 예) 속성으로 데이터를 엑세스
  - values, index
  ```python
  print(s.values) # 값을 엑세스
  print(s.index) # 인덱스를 엑세스

DataFrame

  • 다양한 데이터 타입을 사용한 pandas dataframe
    • ndarray, dictionary, series, list, dataframe

dataFrame을 생성하는 방법들

# 2차원 배열 사용(ndarray 객체) 
input1 = np.array([[1, 2, 3], [4, 5, 6]])
df1= pd.DataFrame(input1) 

# Series객체를 사용
input2 = pd.Series( {"England":"London", 
    "India":"New Delhi", "USA":"Washington",
    "Belgium":"Brussels"} )
df2= pd.DataFrame(input2, columns=[‘City’])

# DataFrame객체를 사용
input3 = pd.DataFrame( data=[6,7,8], 
        index=range(0, 3), columns=['A'] )
df3= pd.DataFrame(input3)
  • 열(column) 추가하기, 행(row) 추가하기
# 열 추가
dfM[‘성별’] = ['M','F','F','M', 'F'] 

# 행 추가
dfM.iloc[5] = ['Hanna','11-11', 'F']

print(dfM)
  • 예) 데이터 엑세스 하기
# 앞의 예제에서 계속…..
print( df['year'] ) #df.year과 동일
print()

# boolean indexing
print( df[ df['year'] > 2016] ) #②
print()

print( df['GDP rate'] ) #③
print()

print( df.GDP ) #④
  • 데이터를 정렬하여 엑세스 하기
    • DataFrame 객체에 있는 sort_values()를 호출
    • 해당 변수에 대해 정렬을 (디폴트는 오름차순)
    • ascending= False 파라미터는 내림차순으로 정렬
      # 앞의 예제에서 계속…..
      print( df.sort_values( by= 'GDP rate') ) 
      print( df.sort_values( by= 'GDP rate', ascending= False) )
  • pandas는 데이타에 대한 연산 함수들을 제공
  • sum()
    • 합계구하기
  • mean()
    • 평균구하기
  • min()
    • 최소를 구하기
  • max()
    • 최대를 구하기
  • describe()
    • 기본적인 통계치를 모두 표시
# 앞의 예제에서 계속…..

sum= df[ 'GDP rate‘ ].sum()
avg= df[ 'GDP rate‘ ].mean()
print(sum)
print(avg)

외부 데이터 파일 읽고 그래프 그리기

  • read_excel(“파일이름”)
    import pandas as pd
    df= pd.read_excel( ‘F:\수강생.xlsx’ ) # 읽은 파일을 df에 할당

DataReader로 Web 데이터 가져오기

import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt

# year, month, day를 기준으로 나눈다.
start = datetime.datetime(2021, 5, 3)
end = datetime.datetime(2021, 5, 21)

# 종목코드, 가져오는 사이트, 시작날짜, 종료날짜
samsung = web.DataReader("005930.KS", "yahoo", start, end)
print( samsung.info() )
728x90