원격 레포지토리에 있는 브랜치를 로컬 PC로 가져와서 작업하기

 

1. remote branch 정보를 최신으로 업데이트하기 (master에서 진행)

git remote update

 

2. 어떤 브랜치를 가져올지 정확한 브랜치명 확인 (master에서 진행)

git branch -r

 

3. 원격 브랜치를 로컬로 가져오기 (master에서 진행)

git branch -t origin/tom_20211220_refreshTokenApply

 

4. 생성된 브랜치 확인

git branch

 

5. 생성된 브랜치로 이동

git checkout origin/tom_20211220_refreshTokenApply

 

6. 이동한 브랜치 다시한번 pull 확인

git pull origin tom_20211220_refreshTokenApply

 

정상 작동시 원격 저장소에 저장되어있던 브랜치와 같은 이름으로 로컬에 새로운 브랜치가 생성된다.

브랜치가 변경된 것 확인

 

 

 

** 에러케이스 **

$ git checkout -t origin/tom_20211220_refreshTokenApply
warning: refname 'origin/tom_20211220_refreshTokenApply' is ambiguous.
warning: refname 'origin/tom_20211220_refreshTokenApply' is ambiguous.
fatal: Ambiguous object name: 'origin/tom_20211220_refreshTokenApply'.

 

 

해결방안

다음과 같은 경우 해당 브랜치의 태그가 ref 리스트에서 중복되는 경우이다.

 

1. 먼저 정확한 브랜치명을 확인한다.

git show-ref

 

 

 

2. 다음과 같이 동일한 ref가 존재하여 풀네임을 명확하게 적어줘야한다.

git checkout -t refs/remotes/origin/tom_20211220_refreshTokenApply

 

브랜치로 변경된 것을 확인 할 수 있다.

 

필요한 작업을 진행하고, 수정된 내용을 push 하는 방법

 

3. 원격 브랜치에 push 하기

git add .
git commit
(커밋 메시지 작성)
git push origin tom_20211220_refreshTokenApply

 

 

Warning: Prop `className` did not match. Server: "sc-gKclnd ctBXSH" Client: "sc-dkPtRN hSjZFd"

 

Next.js로 Styled-components 사용하면, 최초 빌드하여 랜더링은 문제 없이 잘 되는데, 몇번 새로고침을 하면 위와같은 에러가 발생할 때가 있다.

 

Next는 처음 페이지는 SSR(서버사이드 랜더링)으로 작동하고 이후는 CSR(클라이언트 사이드 렌더링)으로 작용하기 때문에, 서버에서 받은 해시 클래스명과 이후 클라이언트에서 작동하는 해시클래스명이 달라져서 스타일을 적용하지 못하는 현상이다.

 

[최초 랜더링] : 정상 작동

 

[n번 새로고침 시] : Warning과 함께 스타일 적용 안됨

 

해결방안

바벨 플러그인을 설치하고 바벨 설정을 해주면 해결 할 수 있다.

이 플러그인은 서버와 클라이언트의 클래스명을 일치 시켜주는 역할을 한다.

 

1. 바벨 플러그인 설치

npm i babel-plugin-styled-components

 

2. 프로젝트 루트 파일에 .bablerc 파일 신규 생성

 

3. .babelrc 파일 설정

{
    "presets": ["next/babel"],
    "plugins": [
      [
        "babel-plugin-styled-components",
        { "fileName": true, "displayName": true, "pure": true }
      ]
    ]
  }

* 인덱스 옵션 설명

 { "fileName": true, "displayName": true, "pure": true }
  • fileName: 코드가 포함된 파일명을 알려줌
  • displayName : 클래스명에 해당 스타일 정보 추가
  • pure : 사용하지 않은 속성 제거

 

 

참고링크 : https://velog.io/@hwang-eunji/Styled-components-nextjs%EC%97%90%EC%84%9C-className-%EC%98%A4%EB%A5%98

 

Styled-components # nextjs에서 className 오류

Warning : Props 'className' did not match next로 styled-components로 스타일 적용하고, 개발 서버를 띄워서 확인해보면 첫 페이지 로딩은 문제없이 잘 작동하고, 새로고침 이후 Warning : Props 'classNa

velog.io

 

개발한 웹페이지를 모바일에서 사용하기 위해 여러가지 설정들을 해주어야 한다.

 

그 여러가지 설정 중에 하나를 오늘 기록하려 한다.

 

바로 '홈 화면에 추가' 기능이다.

 

PC라고 생각했을 때 바로가기 기능과 같다.

 

다만 모바일에서 '홈 화면에 추가'를 해두면, 웹이 앱처럼 동작하게 만들어 준다.

 


 

우선 아무 설정을 하지 않았을 때는 React App이라는 Default 설정 값으로 바로가기 이름이 생성된다.

 

 

나는 이 React App을 서비스 이름으로 변경하고 싶었다.


 

홈화면에 추가 (바로가기 기능)에서 참조하는 파일이 바로 

 

manifest.json 파일이다.

 

최초 리액트 세팅시 create-react-app 명령어를 통해서 public 폴더에 manifest.json 파일이 생성된다.

 

manifest.json 

웹앱 매니패스트 파일은 앱에 대한 정보를 담고 있는 json 파일이다. 

 

{
  "short_name": "TrackDay",
  "name": "Create React App Sample",
  "icons": [
    {
      "src": "favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    },
    {
      "src": "logo192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "logo512.png",
      "type": "image/png",
      "sizes": "512x512"
    }
  ],
  "start_url": ".",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}

 

[Key 별 설정 내용]

  • short_name : 사용자 홈 화면에서 아이콘 이름으로 사용
  • name : 웹앱 설치 배너에 사용
  • icons : 홈 화면에 추가할때 사용할 이미지
  • start_url : 웹앱 실행시 시작되는 URL 주소
  • display : 디스플레이 유형(fullscreen, standalone, browser 중 설정)
  • theme_color : 상단 툴바의 색상
  • background_color : 스플래시 화면 배경 색상
  • orientation : 특정 방향을 강제로 지정(landscape, portrait 중 설정)

 

-> 결론적으로 맨 첫번째 줄의 short_name 값을 원하는 서비스 명으로 변경해주면 바로 완성이다.

 

다음과 같이 서비스명이 자동으로 변경 되었다

 

pandas를 활용해 데이터프레임을 다룰때 엑셀파일이나 CSV 파일을 많이 사용한다.

 

엑셀파일이나 CSV 파일을 불러오고 작업후 저장하는 방법에 대해서 정리해보자.

 

1) 읽기 : .read_csv / .read_excel

2) 저장 : .to_csv / .to_excel 

 

import numpy as np
import pandas as pd

#파일 읽기
my_df = pd.read_csv("파일경로/~.csv")
my_df = pd.read_excel("파일경로/~.xls")

#파일저장하기
my_df.to_csv("파일경로/~.csv")
my_df.to_excel("파일경로/~.xls")
 

 

 

 

 

DataFrame (데이터프레임) 은 여러개의 Series가 모여서 이룬 행*열 데이터이다.

흔히 생각하는 "표" 와 같다.

데이터베이스의 기반이 된다.

 

#Series는 인덱스를 가진 하나의 "컬럼(열)" 이라고 보면 된다.

 

1. DataFrame(데이터프레임) 만들기

 - 이름을 인덱스로 가지는 3개의 시리즈가 있다. (gender/age/job)

 - 이 3개의 시리즈를 이어 붙여서 하나의 family_df 데이터프레임을 만들었다.

 - 시리즈끼리 누락되어있는 인덱스 값은 자동으로 NaN 으로 들어간다.

import numpy as np
import pandas as pd

gender_series = pd.Series(['Female','Female','Male', 'Male'], index = ['Skyler','Mary','Hank','Flin'])
age_series = pd.Series([38,25,30], index = ['Skyler','Mary','Hank'])
job_series = pd.Series(["Accountant","Doctor","DEA","Student"],['Skyler','Mary','Hank','Flin'])

family_df = pd.DataFrame({"Gender":gender_series, "Age":age_series, "Job":job_series})
# 결과 
        Gender   Age         Job
Flin      Male   NaN     Student
Hank      Male  30.0         DEA
Mary    Female  25.0      Doctor
Skyler  Female  38.0  Accountant
 

다음과 같은 데이터프레임이 만들어 졌다.

  Gender Age Job
Flin Male NaN Student
Hank Male 30 DEA
Mary Female 25 Doctor
Skyler Female 38 Accountant

 

 

2. 데이터프레임에 새로운 컬럼 추가하기

 

import numpy as np
import pandas as pd

#2. 특정 시리즈를 데이터프레임에 칼럼으로 추가하기
tall_series = pd.Series([170,183,165,178],
                         index = ['Skyler','Hank','Mary','Flin'])
family_df["Tall"] = tall_series
# 결과
        Gender   Age         Job  Tall
Flin      Male   NaN     Student   178
Hank      Male  30.0         DEA   183
Mary    Female  25.0      Doctor   165
Skyler  Female  38.0  Accountant   170
 
  Gender Age Job Tall
Flin Male NaN Student 178
Hank Male 30 DEA 183
Mary Female 25 Doctor 165
Skyler Female 38 Accountant 170

위와 같이 Tall 시리즈를 이용해서 컬럼을 추가했다.

 

 

3. 데이터프레임에 새로운 열(Row) 추가하기 

3-1) 리스트로 추가하기 : 컬럼의 순서(gender/age/job/tall)에 맞게 리스트요소를 입력해야 한다.

3-2) 딕셔너리로 추가하기 : 순서에 상관없이 key 값과 value값이 서로 호응 하면 된다.

 

import numpy as np
import pandas as pd

#3. 새로운 데이터를 데이터프레임에 행(row)으로 추가하기
#3-1) 리스트로 추가하기
family_df.loc['Walt'] = ['Male',50, 'Teacher', 180]

# 결과
        Gender   Age         Job  Tall
Flin      Male   NaN     Student   178
Hank      Male  30.0         DEA   183
Mary    Female  25.0      Doctor   165
Skyler  Female  38.0  Accountant   170
Walt      Male  50.0     Teacher   180


#3-2) 딕셔너리로 추가하기
family_df.loc['Zessi'] = {'Gender':'Male','Job':'Dealer', 'Tall':170, 'Age':23}

# 결과
        Gender   Age         Job  Tall
Flin      Male   NaN     Student   178
Hank      Male  30.0         DEA   183
Mary    Female  25.0      Doctor   165
Skyler  Female  38.0  Accountant   170
Walt      Male  50.0     Teacher   180
Zessi     Male  23.0      Dealer   170
 

 

 

4. 데이터프레임에 빈 칼럼 추가하기

 - Weight라는 이름의 빈 칼럼을 추가 하였다

 - np.nan 을 사용하였다.

4-1) .loc를 사용하여 행과 열을 지정하여 특정 데이터 하나를 입력할 수있다.

 

import numpy as np
import pandas as pd

#4. 빈 칼럼을 데이터프레임에 추가하기
family_df['Weight']=np.nan
# 결과
        Gender   Age         Job  Tall  Weight
Flin      Male   NaN     Student   178     NaN
Hank      Male  30.0         DEA   183     NaN
Mary    Female  25.0      Doctor   165     NaN
Skyler  Female  38.0  Accountant   170     NaN
Walt      Male  50.0     Teacher   180     NaN
Zessi     Male  23.0      Dealer   170     NaN


#4-1) 빈 칼럼에 특정 데이터 하나 넣기
family_df.loc['Flin','Weight'] = 70
# 
        Gender   Age         Job  Tall  Weight
Flin      Male   NaN     Student   178    70.0
Hank      Male  30.0         DEA   183     NaN
Mary    Female  25.0      Doctor   165     NaN
Skyler  Female  38.0  Accountant   170     NaN
Walt      Male  50.0     Teacher   180     NaN
Zessi     Male  23.0      Dealer   170     NaN
 

 

5. 컬럼끼리의 연산으로 새로운 컬럼 데이터 생성하고 추가하기

 - 인덱스로 컬럼데이터를 불러와서 서로 연산을 할 수 있다.

 - .fillna(0) 으로 NaN 데이터를 0으로 변경하여 연산을 수행 하였다.

 

import numpy as np
import pandas as pd

#5. 인덱스로 불러온 시리즈끼리 연산해서 새로운 칼럼추가하기
family_df['Number'] = family_df['Tall'].fillna(0)*family_df['Age'].fillna(0)

# 결과
        Gender   Age         Job  Tall  Weight  Number
Flin      Male   NaN     Student   178    70.0     0.0
Hank      Male  30.0         DEA   183     NaN  5490.0
Mary    Female  25.0      Doctor   165     NaN  4125.0
Skyler  Female  38.0  Accountant   170     NaN  6460.0
Walt      Male  50.0     Teacher   180     NaN  9000.0
Zessi     Male  23.0      Dealer   170     NaN  3910.0
 

 

6. 특정 컬럼 선택하여 새로운 데이터프레임에 저장하기

 

- 열(Row)을 선택하는 방법은 인덱스처럼 불러오는 것이다.

- 복수의 열이 필요할 때는 인덱스 안에 리스트로 필요한 열을 가져올 수 있다.

- 행(column)을 선택하는 방법은 .loc로 인덱스를 불러오는 것이다.

- 복수의 행이 필요할 때에는 .loc[a:b] 로 범위를 지정하여 불러올 수있다.

 

import numpy as np
import pandas as pd

#6. 데이터프레임에서 특정 행열 선택해서 신규 데이터프레임 만들기

#열선택
body_data = family_df[['Tall', 'Weight']]

# 결과 
        Tall  Weight
Flin     178    70.0
Hank     183     NaN
Mary     165     NaN
Skyler   170     NaN
Walt     180     NaN
Zessi    170     NaN


#행선택
Woman_df = pd.DataFrame(family_df.loc["Mary":"Skyler"])

# 결과
        Gender   Age         Job  Tall  Weight  Number
Mary    Female  25.0      Doctor   165     NaN  4125.0
Skyler  Female  38.0  Accountant   170     NaN  6460.0

 

 

Pandas(판다스) 란?

 

파이썬의 라이브러리이다.

사용 목적은 방대한 행렬, 엑셀자료, CSV자료를 가지고 데이터베이스(DB)작업을 하기 위함이다.

딕셔너리와 유사한 시리즈(Series), 거대한 표인 데이터프레임(DataFrame) 을 가지고 강력한 연산작업을 할 수 있게 해주는 라이브러리이다.

 

 

pandas를 사용하려면 아래의 코드를 가장 먼저 입력해 주어야 한다.

import pandas as pd
 

 

 

1. Series (시리즈) : 특수한 딕셔너리, key 값을 인덱스로 사용할 수 있다.

#Dictionary(딕셔너리) = {'key': 'value', 'key2':'value2' ....}

key 값과 value 값이 있다.

 

이 딕셔너리를 그대로 가져와서 key값을 index로 사용한다고 생각하면 Series(시리즈) 가 된다.

 

 

1-2) Series(시리즈) 정의하기

 - 인덱스를 따로 명시하지 않으면 일반적인 인덱스로 0부터 카운트 된다.

 - 인덱스를 따로 명시하면 그대로 입력된다, 문자열로도 인덱스를 지정 가능하다.

import pandas as pd

#인덱스 미지정
data = pd.Series(['a','b','c','d'])
# 결과
0    a
1    b
2    c
3    d
dtype: object

print(data[1]) # 결과 : b


#인덱스 지정    
data2 = pd.Series(['a','b','c','d'], index = [1,2,3,4])

#결과
1    a
2    b
3    c
4    d
dtype: object

print(data2[1]) # 결과 : a
 

 

1-3) 딕셔너리를 Series(시리즈)로 가져오기

 - 딕셔너리의 Key 값이 Index로 들어간다.

 - index로 명시된 문자열로 불러올 수 도 있고, 일반적인 카운팅 index도 사용 할 수있다

 

import pandas as pd 

my_dict = {'RED':'#FF0000', 'GRN':'#40FF00', 'BLU':'#0404B4', 'PPL': '#8904B1'}

my_Series = pd.Series(my_dict) 
# 결과
RED    #FF0000
GRN    #40FF00
BLU    #0404B4
PPL    #8904B1
dtype: object

print(my_Series[0]) # 결과: #FF0000
print(my_Series['RED']) # 결과 : #FF0000
 

 

 

마스킹이란

원하는 조건을 달아서 조건에 맞는 배열요소들만 걸러내는 작업이다.

 

True/False를 반환하는 조건을 인덱스처럼 집어 넣으면 조건의 True 값을 반환하는 원소들만 뽑아낼 수 있다.

 

arrra2 = array[array > 3]

 

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[6 3 5 6]
 [2 3 4 3]
 [0 4 8 0]]

print(my_arr > 5)
# 결과 
[[ True False False  True]
 [False False False False]
 [False False  True False]]

mask_arr = my_arr[my_arr >5] 
# 결과
[6 6 8]

 

 

Numpy를 이용해서 만든 배열의 여러가지 특징들을 뽑아내는 함수들과 메서드에 대해 정리해보자.

 

[배열이 가진 성분들/ 관련 함수 및 메서드]

.ndim

.shape

.size

.dtype

type()

 

.reshape(행,열)

np.concatenate([배열1, 배열2, ...], axis = 0)

np.split(배열, [i], axis = 0)

 

np.sum(배열)

np.sum(배열, axis = 0)

np.min(배열)

np.max(배열)

np.mean(배열)

np.std(배열)

 

 

1. .ndim

 - 배열의 차원 알아보기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(my_arr.ndim) # 결과 : 2
 

 

2. .shape

 - 배열의 행*열 모양 알아보기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(my_arr.shape) # 결과 : (3,4)
 

 

3. .size

 - 배열요소의 개수 세기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(my_arr.size) # 결과 : 12

 

4. .dtype

- 배열요소의 데이터타입 알아보기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(my_arr.dtype) # 결과 : int64

 

5. type()

 - 배열 자체의 타입 알아보기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(type(my_arr)) # 결과 : <class 'numpy.ndarray'>
 

6. .reshpe(행*열)

 - 배열의 모양 바꾸기 

 - 배열요소의 갯수에 맞게 모양을 바꿀 수 있다.

 - 요소갯수의 약수로만 만들 수 있다.

 - 2차원 배열에서 --> 다른 N차원으로 변경 불가

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[9 2 1 9]
 [8 5 4 9]
 [2 9 1 7]] 

re_arr = my_arr.reshape(2,6) 
# 결과 
[[9 2 1 9 8 5]
 [4 9 2 9 1 7]]

re_arr2 = my_arr.reshape(2,2,4) 
#결과 : ValueError: cannot reshape array of size 12 into shape (2,2,4)

re_arr3 = my_arr.reshape(5,3)
# 결과 : ValueError: cannot reshape array of size 12 into shape (5,3)

 

7. np.concatenate()

 - 배열 합치기 

 - axis = 0/1 로 지정해줌으로써 합치는 방향을 정할 수 있다.

 - axis = 0 : 세로방향으로 이어 붙이기 , 열의 숫자를 맞춰주어야 한다.

 - axis = 1 : 가로방향으로 이어 붙이기 , 행의 숫자를 맞춰주어야 한다.

 

import numpy as np

A = np.random.randint(0,10,(2,3))
B = np.random.randint(11,100,(4,3))

AB = np.concatenate([A,B], axis = 0)
# 결과 
[[ 3  4  3]
 [ 2  9  3]
 [68 80 60]
 [12 62 86]
 [53 34 19]
 [50 57 32]]

A = np.random.randint(0,10,(2,3))
C = np.random.randint(11,100,(2,4))

AC = np.concatenate([A,C], axis = 1)
#
[[ 0  4  6 68 95 80 33]
 [ 5  5  5 84 39 13 15]]
 

 

8. np.split()

 - 배열 나누기 , 쪼개기 

 - axis 를 설정해줌으로써 가로방향으로 쪼갤지, 세로방향으로 쪼갤지 정할 수 있다.

 - axis = 0 : upper/lower 

 - axis = 1 : left/right 

 

import numpy as np

my_arr = np.random.randint(0,10,(3,4))
[[9 2 1 9]
 [8 5 4 9]
 [2 9 1 7]] 

upper, lower = np.split(my_arr, [1], axis = 0)
# 결과
print(upper) 
[[6 1 4 4]]
print(lower)
[[5 5 1 6]
 [0 7 6 6]]

left, right = np.split(my_arr, [1], axis = 1)
# 결과 
print(left) 
[[6]
 [5]
 [0]]
print(right)
[[1 4 4]
 [5 1 6]
 [7 6 6]]​

 

9. sum()

 - 배열요소들의 합 구하기 

 - axis 설정으로 가로방향 누적합/ 세로방향 누적 합을 구할 수 있다.

import numpy as np

my_arr = np.random.randint(0,10,(3,4))

[[9 2 1 9]
 [8 5 4 9]
 [2 9 1 7]] 

print(np.sum(my_arr)) # 결과 : 51

print(np.sum(my_arr, axis = 0))
# 결과 
[11 13 11 16]

print(np.sum(my_arr, axis = 1))
# 결과 
[15 17 19]
 

 

10. np.min(), np.max(), np.mean(), np.std(), np.count_nonzero()

- np.min() : 배열 요소 중 최소값 구하기

- np.max() : 배열 요소 중 최대값 구하기

- np.mean() : 배열요소들의 평균 구하기 

- np.std() : 배열 요소들의 표전편차 구하기

- np.count_nonzero() : 배열요소들 중 0이 아닌 것의 갯수 

import numpy as np

my_arr = np.random.randint(0,10,(3,4))

[[9 2 1 9]
 [8 5 4 9]
 [2 9 1 7]] 

print(np.min(my_arr)) # 결과 : 0

print(np.max(my_arr)) # 결과 : 7

print(np.mean(my_arr)) # 결과 : 4.25

print(np.std(my_arr)) # 결과 : 2.2407216099581255

print(np.count_nonzero(my_arr)) # 결과 : 12
 

 

랜덤한 수를 난수라고 한다.

np.random 을 사용해서 난수로 채워진 여러가지 배열을 만들어 보려한다.

 

1. np.random.random(행*열) : 원하는 행렬 크기로 난수배열 만들기

튜플()의 형태로 행*열이라고 생각하여 원하는 모양의 숫자를 입력하면 된다. (주의할점은 괄호()가 두개이다)

 

import numpy as np
a = np.random.random((3,4))
print(a)
# 결과
#[[0.30822896 0.62104282 0.09954799 0.9689817 ]
# [0.86878544 0.08885583 0.84083332 0.42928726]
# [0.13762798 0.34424021 0.68729553 0.02205725]]
 

 

2. np.random.normal(평균, 표준편차, (행*열)) : 평균과 표준편차를 지정하여 표준정규분포표에서 랜덤으로 원하는 크기의 숫자 데이터 배열만들기

 

import numpy as np
b = np.random.normal(0,1,(2,3))
print(b)
# 결과
#[[ 1.32520528 -1.41569207 -0.29792984]
# [ 0.61157424  1.4428348   0.81730907]]

 

3. np.random.randint(시작, 끝, (행*열)) : 시작숫자 이상 끝숫자 미만의 정수들을 랜덤으로 뽑아 원하는 크기의 행렬로 배열 만들기

import numpy as np
c = np.random.randint(0,10,(2,2))
print(c) 
# 결과
#[[6 3]
# [3 5]]
 

 

배열(Array)이란?

같은 타입의 변수들로 이루어진 유한 집합

배열을 구성하는 각각의 값을 배열요소(element)라고 하며, 배열에서 위치를 가리키는 숫자는 인덱스(index)라고 한다.

 

파이썬에서 리스트의 확장판이라고 생각하면 쉽다.

1차원의 리스트를 N차원까지 확대한 것이 배열이다.

하지만 현실세계에서는 대용량의 리스트가 존재하며, 이를 다룰 때에는 Numpy 라이브러리를 사용하는 것이 아주 강력하다.

 

Numpy : 고성능의 수치 계산을 위해 만들어진 라이브러리

 

numpy 라이브러리를 사용할 때는 다음과 같이 라이브러리를 사용하겠다고 명시&입력을 해주어야 관련된 클래스나 함수를 가져다 쓸 수 있다.

 

import numpy as np

 

1) 배열만들기

1차원 배열 = 리스트와 비교를 해보았다.

한가지 차이점은 리스트는 원소들의 데이터타입이 서로 달라도 가능하지만, 배열은 모두 같아야만 한다.

list(range(5))
# 결과 : [0, 1, 2, 3, 4]

np.array([0,1,2,3,4,5])
# 결과 : [0 1 2 3 4 5]

np.arange(5)
# 결과 : [0 1 2 3 4 5]

2) 여러가지 배열 만들기 함수

ㅇ 이차원 배열 만들기 : 원하는 모양대로 하나의 원소를 리스트로 만들어서 np.array()안에 입력하면 된다.

import numpy as np
my_array = np.array([[1,2],
                      [3,4]])
# 결과 :
[[1 2]
 [3 4]]
 

ㅇ 배열의 데이터 타입 결정하기, 데이터타입 확인하기, 데이터 타입 바꾸기

my_array = np.array([1,2,3,4,5], dtype = float)
# 결과 : my_array = [1., 2., 3., 4., 5.]
my_array.dtype 
# 결과 : dtype('float64')
my_array.astype('int')
# 결과 : my_array = [1,2,3,4,5]

 

 

ㅇ 여러가지 배열 만들기 :

 배열요소가 비어있는 배열 만들기, 초기화가 없는 값으로 배열을 반환 np.empty

 0으로 채워진 배열 만들기 np.zeros()

 1로 채워진 배열 만들기 np.ones()

 np.arange(시작값, 끝값, 간격)

 np.linspace(시작값, 끝값, 등분)

 

arr_empty = np.empty
# 결과 : <built-in function empty>
arr_0 = np.zeros(5)
# 결과 : [0. 0. 0. 0. 0.]
arr_1 = np.ones((3,5), dtype = int)
# 결과 : 
[[1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]]
arr_2 = np.arange(0,10,2)
# 결과 : [0 2 4 6 8]
arr_3 = np.linspace(0,1,5)
# 결과 : [0.   0.25 0.5  0.75 1.  ]

 

3. 리스트를 받아서 배열로 만들기

np.array(리스트명) 으로 바로 배열로 만들 수 있다.

리스트를 바로 사용하지 않고 배열로 바꾸는 이유는 numpy의 강력한 연산과 데이터 처리 기능을 사용하기 위해서 이다.

받는 리스트의 크기가 클 수록 반드시 선행되어야 하는 작업이다.

 

my_list = [1,2,3,4,5]
my_array = np.array(my_list)
# 결과 : my_array = [1 2 3 4 5]
 

 

+ Recent posts