반응형

시리즈(Series)

  • 데이터가 순차적으로 나열된 1차원 배열 형태
  • 딕셔터리로 Series 생성시 -> key 는 시리즈의 인덱스와 대응된다.
  • 리스트로 Series 생성시 -> 리스트의 인덱스가 시리즈의 인덱스로 대응된다.
dict_data = {'a':1,'b':2,'c':3}
series_data=pd.Series(dict_data)

a    1
b    2
c    3

list_data = ['2022-10-11',3.14,'ABC',100,True]
series_data1=pd.Series(list_data)

0    2022-10-11
1          3.14
2           ABC
3           100
4          True

데이터프레임(DataFrame)

    • 행과 열로 만들어지는 2차원 배열 형태
    • 열은 각각의 시리즈 객체이다. key 값이 열 이름이 된다.
dict_data = {'c0':[1,2,3],'c1':[4,5,6],'c2':[7,8,9],'c3':[10,11,12],'c4':[13,14,15]}
df=pd.DataFrame(dict_data)

   c0  c1  c2  c3  c4
0   1   4   7  10  13
1   2   5   8  11  14
2   3   6   9  12  15
    • 데이터 내용 확인
      • columns : 컬럼명 확인
      • head() : 상단 5개 확인
      • tail() : 하단 5개 확인
      • shape : 행,열 크기 확인
      • info() : 데이터에 대한 정보 확인 - 행,열 크기, 컬럼명
      • type() : 데이터 타입
    • 열선택
      • 열 1개 선택 : 시리즈 객체를 반환한다.
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

names = t['Name'].head()   # t.Name 으로도 사용 가능
print(names)
print(type(names))
0                                Kelly, Mr. James
1                Wilkes, Mrs. James (Ellen Needs)
2                       Myles, Mr. Thomas Francis
3                                Wirz, Mr. Albert
4    Hirvonen, Mrs. Alexander (Helga E Lindqvist)
Name: Name, dtype: object
<class 'pandas.core.series.Series'>
  •  열 다중 선택 : 데이터 프레임으로 반환 한다.
names_age = t[["Name", "Age"]]
print(names_age)
print(type(names_age))

                                           Name   Age
0                              Kelly, Mr. James  34.5
1              Wilkes, Mrs. James (Ellen Needs)  47.0
2                     Myles, Mr. Thomas Francis  62.0
3                              Wirz, Mr. Albert  27.0
4  Hirvonen, Mrs. Alexander (Helga E Lindqvist)  22.0
<class 'pandas.core.frame.DataFrame'>

데이터 필터링

PassengerId	Survived	Pclass	Name	Sex	Age	SibSp	Parch	Ticket	Fare	Cabin	Embarked
0	892	0	3	Kelly, Mr. James	male	34.5	0	0	330911	7.8292	NaN	Q
1	893	1	3	Wilkes, Mrs. James (Ellen Needs)	female	47.0	1	0	363272	7.0000	NaN	S
2	894	0	2	Myles, Mr. Thomas Francis	male	62.0	0	0	240276	9.6875	NaN	Q
3	895	0	3	Wirz, Mr. Albert	male	27.0	0	0	315154	8.6625	NaN	S
4	896	1	3	Hirvonen, Mrs. Alexander (Helga E Lindqvist)	female	22.0	1	1	3101298	12.2875	NaN	S
  • Boolean 인덱싱 : true 만 추출
# 35살 초과인 데이터 추출
d1 = t["Age"]>35
print(t[d1])

   PassengerId  Survived  Pclass  \
1           893         1       3   
2           894         0       2   
11          903         0       1   
13          905         0       2   
14          906         1       1
  • isin() : 각각의 요소가 데이터 프레임, 시리즈에 존재하는지 파악하여 true/false 반환
# Pclass 변수의 값이 1일 경우, True/False 값 반환
t['Pclass'].isin([1])

	PassengerId	Survived	Pclass	Name	Sex	Age	SibSp	Parch	Ticket	Fare	Cabin	Embarked
11	903	0	1	Jones, Mr. Charles Cresson	male	46.0	0	0	694	26.0000	NaN	S
12	904	1	1	Snyder, Mrs. John Pillsbury (Nelle Stevenson)	female	23.0	1	0	21228	82.2667	B45	S
14	906	1	1	Chaffee, Mrs. Herbert Fuller (Carrie Constance...	female	47.0	1	0	W.E.P. 5734	61.1750	E31	S
20	912	0	1	Rothschild, Mr. Martin	male	55.0	1	0	PC 17603	59.4000	NaN	C
22	914	1	1	Flegenheim, Mrs. Alfred (Antoinette)	female	NaN	0	0	PC 17598	31.6833	NaN
  •  isna() : 결측값은 true 반환, 그외에는 false 반환
  • notna() : 결측값은 false 반환, 그외에는 true 반환
9	901	0	3	Davies, Mr. John Samuel	male	21.0	2	0	A/4 48871	24.1500	NaN	S
10	902	0	3	Ilieff, Mr. Ylio	male	NaN	0	0	349220	7.8958	NaN	S

t["Age"].isna()[0:12]  #10번째에 Age 가 NaN
9     False
10     True			# NaN 은 true 값 반환
11    False

t[t["Age"].isna()].head()

	PassengerId	Survived	Pclass	Name	Sex	Age	SibSp	Parch	Ticket	Fare	Cabin	Embarked
10	902	0	3	Ilieff, Mr. Ylio	male	NaN	0	0	349220	7.8958	NaN	S
  • 결측치 제거
    • dropna(axis=0) : 결측치 존재하는 행 전체 제거
    • dropna(axis=1) : 결측치 존재하는 열 전체 제거
  • 이름과 인덱스로 행, 열 선택
    • loc[] : 행 이름과 열 이름 사용
    • iloc[] : 행번호와 열 번호 사용
# 나이가 35세 초과인 사람의 이름과 나이 출력
t.loc[t['Age']>35, ['Name', 'Age']]
  • 통계 관련 기능
    • mean() : 평균값
    • median() : 중앙값
    • describe() : 통계 요약
    • agg() : 여러개 열에 여러 함수 적용
    • groupby() : 그룹별 집계
    • value_counts() : 값 개수
  • 행, 열추가
    • DataFrame.loc[새로운 행 이름] = 데이터 값
    • DataFrame['열이름']
728x90
반응형

'Development > Python' 카테고리의 다른 글

머신러닝 관련 용어  (0) 2023.06.12
colab 에서 kaggle 설정  (0) 2023.06.07
NumPy 사용  (0) 2023.05.09
Conda python 버전 업데이트  (0) 2023.04.15
Mac 에서 Conda 설치  (0) 2023.04.05
반응형

 AWS 를 이용해서 어떻게 파이프 라인을 구축하고 사용하는지 공부해보려고 이 책을 읽기 시작했다. 그런데 이책.. 생각보다 읽기가 쉽지 않다. 
  처음에는 챕터 1에서 AWS 기반 데이터 과학에 대한 소개가 이루어지고, 챕터 2에서는 AWS를 활용한 모범사례가 소개되어있다. 그러나 이 부분에서는 다양한 기술과 내용들이 많이 다뤄져서 진도를 나가기가 어려웠다. 특히, AWS에 대한 기반 지식이 부족한 나에게는 쉽게 이해되지가 않았다.
  그래서 생각해 보니 챕터 3부터 시작해서 주요 기술이 자세히 설명되어 있는 부분부터 읽는 것도 좋을것 같았다. 책을 읽으면서 중요한 기술들을 학습하고, 해당 내용을 실습하며 익히다 보면 보다 쉽게 파이프 라인 구축에 도움이 될것이다. 

  이 책을 읽으면서 가장 큰 단점은 이미지나 캡쳐 화면과 같은 시각적인 자료가 부족하다는 점이다. 텍스트로만 설명 되어 있어 설정 값들과 텍스트가 의미하는 것들을 이해하는 데에 어려움이 많았다. 책에 시각적인 자료를 추가하거나 관련된 예시와 함께 설명해 주면 내용을 보다 쉽게 이해할 수 있을 것이다.
  결론적으로, 이 책은 AWS에 대한 기반 지식이 있는 독자들에게 더 유익하게 다가갈 수 있을것이다. 그리고 책을 공부하기 위해서는 먼저 AWS 에 대한 기반 지식을 충분히 습득한 후에 읽는것이 좋을것 같다. 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

728x90
반응형
반응형

NumPy 배열

  • 차원(Dimension)을 축(axis)이라고 표현한다.

배열 속성값

  • shape : 배열의 각 축(axis)의 크기
  • ndim : 축의 개수(Dimension)
  • dtype : 각 요소(Element)의 타입
  • itemsize : 각 요소(Element)의 타입의 bytes 크기
  • size : 전체 요소(Element)의 개수

배열 생성

  • np.array 이용 : 튜플이나 List 입력

    print(np.array([2,3,4]))
    [2 3 4]
  • np.zeros(shape) : 0 으로 구성된 N 차원 배열 생성

    print(np.zeros((3,4)))
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
  • np.ones(shape) : 1로 구성된 N차원 배열 생성

    print(np.ones((2,3,4)))
    [[[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]
     [[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]]
  • np.empty(shape) : 초기화 되지 않은 N차원 배열 생성

    print(np.empty((2,3)))
    [[2.45757343e-316 0.00000000e+000 0.00000000e+000]
     [0.00000000e+000 0.00000000e+000 0.00000000e+000]]
  • np.arange(start, stop, step): N 만큼 차이나는 숫자 생성, stop 은 포함되지 않는다

    print(np.arange(0, 10, 2))
    [0 2 4 6 8]
  • np.linspace(start, stop, num): N 등분한 숫자 생성, 처음, stop 포함됨.

    print(np.linspace(0,99, 100))
    [ 0.  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.]

기본 연산

  • "*" : 각각의 원소끼리 곱셈

  • @ : 행렬 곱셈

    A = np.array( [[1,1], [0,1]] )
    B = np.array( [[2,0], [3,4]] )
    print(A)
    print(B)
    ---------------
    [[1 1]
     [0 1]]
    [[2 0]
     [3 4]]
    
    print(A*B)
    print(A@B)
    ---------------
    [[2 0]
     [0 4]]
    [[5 4]
     [3 4]]
  • 집계함수

    • sum

    • min

    • max

    • argmax : 최대값 인덱스

    • cumsum : 누적합

    • axis 값을 매개변수로 입력하면 축을 기준으로 연산이 가능하다.

      • axis=0 (열기준)

      • axis=1 (행기준)

        b = np.arange(12).reshape(3, 4)
        [[ 0  1  2  3]
         [ 4  5  6  7]
         [ 8  9 10 11]]
        
         print(b.sum(axis=0))
         [12 15 18 21]
         print(b.sum(axis=1))
         [ 6 22 38]
  • 인덱싱, 슬라이싱

    • 배열 자체를 가지고 인덱싱이 가능 하다. 배열의 인덱스 값으로 배열 자체가 들어갈 수도 있다.

      a = np.arange(12).reshape(3,4)
      print(a)
      [[ 0  1  2  3]
       [ 4  5  6  7]
       [ 8  9 10 11]]
      
      b=a>4
      print(b)
      [[False False False False]
       [False  True  True  True]
       [ True  True  True  True]]
      
      print(a[b])
      a[b].shape 
      [ 5  6  7  8  9 10 11]
      (7,)
      
      a[b]=0
      print(a)
      [[0 1 2 3]
       [4 0 0 0]
       [0 0 0 0]]
  • 크기 변경

    • revel : 1차원으로 변경
    • reshape : 지정한 차원으로 변경
    • T : 전치 변환
    a = np.arange(12).reshape(3,4)
    print(a)
    print(a.shape)
    
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    (3, 4)
    
    print(a.ravel())   # a.reshape(-1)
    [ 0  1  2  3  4  5  6  7  8  9 10 11]
    
    print(a.T)
    [[ 0  4  8]
     [ 1  5  9]
     [ 2  6 10]
     [ 3  7 11]]
  • 데이터 합치기

    • vstack (열기준), hstack(행기준)

      a = np.array([1, 2, 3, 4]).reshape(2, 2)
      print(a)
      [[1 2]
       [3 4]]
      
      b = np.array([5, 6, 7, 8]).reshape(2, 2)
      print(b)
      [[5 6]
       [7 8]]
      
      print(np.vstack((a,b)))
      [[1 2]
       [3 4]
       [5 6]
       [7 8]]
      
      print(np.hstack((a,b)))
      [[1 2 5 6]
       [3 4 7 8]]
    • hsplit

      • 숫자 1개일경우 숫자기준으로 X개 등분

      • 리스트 넣을 경우 인덱스 기준 분할 (start, end) 일경우 end 는 포함되지 않음

        [[ 0  1  2  3  4  5]
         [ 6  7  8  9 10 11]]
        
        np.hsplit(a, 3)
        [array([[0,1],[6,7]]), 
         array([[2,3],[8,9]]), 
         array([[4,5],[10,11]])]
        
        np.hsplit(a, (3,4))
        [array([[0, 1, 2],[6, 7, 8]]), 
         array([[3],[9]]), 
         array([[ 4,  5],[10, 11]])]
728x90
반응형

'Development > Python' 카테고리의 다른 글

colab 에서 kaggle 설정  (0) 2023.06.07
Pandas 사용  (0) 2023.05.23
Conda python 버전 업데이트  (0) 2023.04.15
Mac 에서 Conda 설치  (0) 2023.04.05
파이썬 가상 환경 실행 및 VS Code 설정  (0) 2023.03.27
반응형

머신 러닝에 대한 내가 갖고 있던 생각은 일단 "어렵다" 이다. 분명 트랜드이고 많은 부분에서 연구하고 공부하는 사람들도 많은데 이상하게 공부하기가 쉽지 않았다. 그렇게 느꼈던 것은 아마도 무엇부터 공부해야 할지 몰랐던것 같다. 그리고 프로그래밍 언어를 주로 공부를 했던 습관때문인지는 몰라도 언어의 기법, 또는 기능을 공부하는것 이외에 이론을 먼저 공부하는게 쉽지 않았다. 

머신러닝, 딥러닝 등등의 내용을 이해하기 위해서는 우선 이게 무엇인지 부터 알아야 하고 각각 사용하는 용어에 대해서도 익숙해질 필요가 있다. 

이책은 머신 러닝 시스템 설계를 하기 위해서 필요한 것들이 무엇인지 단계별로 설명해 주고 있다. 머신러닝이 무엇인지, 기초 적인 배경지식들은 무엇이 필요한지 설명을 해준다. 그리고 데이터를 수집하고 정제하고 모델을 만들고 평가하고 모니터링 하는 부분들에 대해서 전반적인 내용들을 살펴 볼수 있다. 

현재 책의 중간 정도 읽고 있는 시점인데 한가지 염두해둬야 할것이 있다. 이책을 이해하기 위해서는 책 이외에 따로 공부도 필요하다. 기존 머신러닝에 대한 지식이 있다면 괜찮지만 그렇지 않다면 중간중간 나오는 용어들이나 설명들이 이해가 안될 수 있다. 나 또한 그런 부분들이 있어서 인터넷을 검색해보면서 같이 읽어보고 있다. 

ML 을 공부하는 입장에서 단한권의 책으로 모든 것을 이해하고 적용해볼수 있는 수준으로 갈수 없다는 것은 잘 알고 있다. 하지만 이책을 통해서 기본적이고 중요한 요점들을 파악한후 추가적인 공부를 한다면 ML 을 이해하는데 도움이 될수 있을것 같다. 

   "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

728x90
반응형
반응형

현재 conda 를 사용한  python 가상 환경의 버전은 3.8.2 로 되어있다.

이것을 변경하기 위해서는 다음과 같은 절차를 거친다.

1. 설치 가능한 python 버전 확인
conda search python
위 명령어를 사용하면 설치 가능한 python 버전을 확인 할 수 있다.

2. python 설치
conda install python=버전

3. 가상환경 재접속
가상환경을 deactivate 하고 다시 activate 하면 파이썬 버전이 변경되어있다.

 

728x90
반응형

'Development > Python' 카테고리의 다른 글

Pandas 사용  (0) 2023.05.23
NumPy 사용  (0) 2023.05.09
Mac 에서 Conda 설치  (0) 2023.04.05
파이썬 가상 환경 실행 및 VS Code 설정  (0) 2023.03.27
파이썬 문법 : 데코레이터 함수  (0) 2023.03.13
반응형

VS Code 사용하다 보면  Explore 창에 디렉토리가 플렛하게 나오는 것이 불편할 때가 있다.

이렇게 test 디렉토리 하위에 test1 이라는 디렉토리가 1개 만 있을 경우 옆으로 표시된다. 이때에 test 디렉토리에 무언가 생성하려고 하면 test1 디렉토리에 생성이 된다. 

Compact Folders 기능

Settings  에 들어가보면 Compact Folders 라는 설정이 있다.

기본 설정으로는 체크가 되어있다. 저 체크를 해제 하게 되면 디렉토리가 다음과 같이 나온다.

 

728x90
반응형
반응형

Mac 에서 Conda 는 간단히 설치가 가능 하다. .

brew install conda
....
## 설치 완료시
anaconda was successfully installed!

➜  ~ conda -V
zsh: command not found: conda

설치 완료 후에 실행을 해보면 저렇게 not found 가 나올수 있다. 현재 사용중인 터미널에 path 가 입력이 안되어서 저런 현상이 발생한다. 

➜  ~ /usr/local/anaconda3/bin/conda init zsh
no change     /usr/local/anaconda3/condabin/conda
no change     /usr/local/anaconda3/bin/conda
no change     /usr/local/anaconda3/bin/conda-env
no change     /usr/local/anaconda3/bin/activate
no change     /usr/local/anaconda3/bin/deactivate
no change     /usr/local/anaconda3/etc/profile.d/conda.sh
no change     /usr/local/anaconda3/etc/fish/conf.d/conda.fish
no change     /usr/local/anaconda3/shell/condabin/Conda.psm1
modified      /usr/local/anaconda3/shell/condabin/conda-hook.ps1
no change     /usr/local/anaconda3/lib/python3.10/site-packages/xontrib/conda.xsh
no change     /usr/local/anaconda3/etc/profile.d/conda.csh
modified      /Users/test/.zshrc

==> For changes to take effect, close and re-open your current shell. <==

/usr/local/anaconda3/bin 은 conda 가 설치된 위치이다. conda 명령어와 함께 init 현재 사용중인 쉘을 입력해주면 저렇게 뭔가 쭉 나온다. 마지막에 보면 modified /Users~ 가 보인다. .zshrc 파일이 뭔가 수정된것으로 보인다. 한번 확인해보면 다음과 같은 내용들이 추가되어 있다.

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/usr/local/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/usr/local/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/usr/local/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/usr/local/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

이렇게 확인한 후 쉘을 닫았다가 다시 열면 정상적으로 명령어들이 동작한다.

➜  ~ conda -V
conda 23.1.0
➜  ~ conda activate
(base) ➜  ~

참고로 현재 사용중인 shell 을 확인하는 방법은 다음과 같다.
echo $SHELL

 

728x90
반응형

'Development > Python' 카테고리의 다른 글

NumPy 사용  (0) 2023.05.09
Conda python 버전 업데이트  (0) 2023.04.15
파이썬 가상 환경 실행 및 VS Code 설정  (0) 2023.03.27
파이썬 문법 : 데코레이터 함수  (0) 2023.03.13
파이썬 문법 : 제너레이터 함수  (0) 2023.03.09
반응형
  • 파이썬 가상 환경 실행 방법
python -m venv 디렉토리명

python 3 부터는 venv 가 포함되어있어서 virtualenv 를 설치 하지 않아도 된다. 위와 같이 실행을 하면 입력한 폴더가 생성이 된다. 가상환경 실행은 폴더 하위에 Script 디렉토리에 있는 activate 를 실행 하면 된다. (mac 인 경우 source ./bin/activate 를 실행한다.)

  • VS Code 설정 방법
    -  Ctrl + Shift + P 입력 (cmd + Shift + P)

       -  가상 환경 선택 또는 새로운 path  선택 (새로운 path 선택시 위에서 생성된 bin 디렉토리 또는 Script 디렉토리에 있는 python 을 선택하면 된다)

 

728x90
반응형
반응형

그동안 리액트를 공부하면서 느꼈던 점을 생각해보면 생각보다 어렵다는 거였다. 컴포넌트를 그리고 재사용 하기 위해서 리액트를 사용하려면 무작정 만들어서 되는것도 아니고 전체적인 구조를 생각해 가면서 만들어야 하기 때문이다. 물론 처음부터 모두 생각하고 만들수 없기 때문에 만들면서 리팩토링을 하는것이 필수이다. 하지만 언어가 갖고 있는 기능만 알고 있다고 해서 해결될 문제는 아니다. 무엇보다도 무언가를 만들어보면서 느낄수 있는 것들이 있기 때문이다.

이런 이유에서 이 책은 리액트를 공부한 사람들에게 프로젝트를 따라 해보면서 기능들을 활용해 볼 수 있는 좋은 참고서가 될 수 있다. (기본적인 지식은 반드시 알고 있어야 한다.)

무언가를 하나 만들려면 하루 아침에 뚝딱 만들어지는 것은 아니다. 먼저 생각해야 할 것들이 있고 만들면서 생각해야 되는 것들이 있다. 그런 모든 과정이 이책에 있는 프로젝트를 따라 만들면서 경험해 볼 수 있다. 공통 기능을 만드는 시점, 비지니스 기능을 만드는 시점등 각각의 단계에서 필요한 기능과 주의 사항들을 알아 볼 수 있다.

이 책에서는 계산기, Todo 리스트, 여행사진 공유앱 이렇게 3가지를 만들게 된다. 3가지밖에 안된다고 생각할 수도 있지만 책 두께를 보면 그런 생각이 안들것이다. ^^;; 900 페이지가 되는 이 책에는 그만큼 많은 내용들이 담겨 있으니 시간을 갖고 천천히 따라해보면서 익히면 리액트 지식을 습득하는데 많은 도움이 될 것이다.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

728x90
반응형

+ Recent posts