본문 바로가기

TIL(2024y)/Pandas (w OpenCV)

24.05.16 Pandas & OpenCV

Pandas method 

  • df.sort_index() 
    - dataframe에 숫자들이 index 기준 순차적으로 정렬 
    - df.sort_index(axis=0, ascending=Ture) : index 기준 순차적 정렬
    - df.sort_index(axis=0, ascending=False) : index 기준 큰 숫자부터 정렬
  • df.sort_values() 
    - values 기준으로 순차적으로 정렬 
  • df[ : ]
    - slicing으로 선택하는 것 
    - e.g. df[1:5] --> 1,2,3,4 까지 data 보는 것 
  • df.loc[ ] (행렬을 입력해서 selesction)
    - 행 1개를 입력하면 해당 행에 대한 series가 모두 나옴 
  • df.loc[ : ]
    - 행의 범위를 선택하면 범위 내 행의 series가 모두 나옴
  • df.at[ ] 
    - 1개 data만 선택할 때
    - df.at[행:렬]
  • df.iloc[ ] (순서 번호를 입력해서 selection)
    - 순서 번호를 입력하면 해당 숫자의 data가 나옴
    - e.g. df.iloc[1,2] 
  • df.iat
    - df.iloc과 유사
    - 한 column이나 row를 선택하려면 --> index나 값을 한개만 입력
    - 연속된 column이나 연속된 row를 선택하려면 --> : (slicing)
    - 불연속한 column이나 불연속한 row를 선택하려면 --> [ ] (list를 사용) 
  • df[df["A"] > 0]
    - data frame내 0보다 큰 값에 대해서 selection
  • column을 새로 추가하고 싶을 때
    - df[추가하고자 하는 열] = [해당 열에 넣을 data]
  • df.copy( )
    - 값이 복사 됨 
  • df.isin([ ])
    - df.isin()은 DataFrame에서 특정 값을 포함하는 행 또는 열을 선택하는 데 사용되는 메서드
    - 주어진 값들의 집합을 포함하는지 여부에 따라 불리언(True/False) 값의 DataFrame을 반환
    - 이를 통해 특정 조건을 충족하는 행이나 열을 선택할 수 있음.
    - 예를 들어, 
    df.isin([value1, value2])는 DataFrame에서 값이 value1 또는 value2인 모든 요소가 포함된 행 또는 열을 선택함
  • df.dropna( )
    - df.dropna()는 DataFrame에서 결측값(NaN 또는 None)을 포함한 행이나 열을 삭제하는 method
  • df.fillna( )
    - NaN 또는 None 값을 채우는 함수 
    - e.g. df.fillna(value=5) --> non값에 5로 채워짐
  • pd.isna( )
    - df.dropna()는 DataFrame에서 결측값(NaN 또는 None)을 포함한 행이나 열을 삭제하는 method
  • df.mean( )
    - mean값을 알려주는 method
  • df.sub
  • df.agg
  • df.transform = df.T
  • .value_counts( )
    - series 내 숫자가 몇 개가 있는지 세어주는 method
  • .value_counts( ).sort_values(ascending=True)
    - 개수가 많은 data 순으로 나열해 주는 method 
  • s.str.lower( ) 
    - string을 모두 소문자로 바꿔주는 method 
  • pd.concat( )
    - series? 들을 합쳐서 표로 만들어 줌 
    - 똑같이 생긴 data를 아래로 붙여준다 생각하면 됨
    - numpy에서는 concatrate 
  • pd.merge( )
    - join 과 동일(?)


    - pd.merge(lest, right, on='key'): 경우의 수 대로 다 붙임
    - df.merge(letf, right, left_on='key1', right_on='key2')

 

  • df.merge(letf, right, left_on='key1', right_on='key2', how='outer')
    - how=outer는 데이터프레임을 결합할 때, 양쪽 모든 인덱스를 보존하면서 결합하는 방식을 지정
    - 이 방식은 왼쪽과 오른쪽 데이터프레임에서 공통된 인덱스가 아닌 모든 인덱스를 포함하여 결합
    - 결합된 데이터프레임에서 결측값이 있는 위치에는 NaN이 채워짐

  • df.groupby.sum( )
    - (찾아보기)
  • df.stack( )
    - Dataframe의 열을 행으로 회전시키는 작업을 수행함 (내가 원하는 data 형식으로 바꾸고 싶을 때 사용)
    - 이로써 다중 인덱스를 갖는 Series나 DataFrame을 생성
    - 결과적으로 생성된 Series나 DataFrame은 누락된 값들을 자동으로 제거함

  • stacked.unstack( )
    - stack된 dataframe을 다시 원래 형태로 되돌림
  • pivot_table( )
    - 데이터를 집계하고 요약할 때 씀
    - 주어진 데이터에 따라 평균값, 합계, 개수 등을 계산하고, 여러 행과 열을 사용하여 다양한 조합의 집계를 생성

    - privot_table(df, index, column) 순으로 입력 
    - index: 생성된 피벗 테이블의 행 인덱스로 사용할 열을 지정
    - columns: 생성된 피벗 테이블의 열 인덱스로 사용할 열을 지정
    - values: 집계될 값을 나타내는 열을 지정
    - aggfunc: 집계 함수를 지정. 기본적으로 평균이 사용되지만, 다른 함수도 지정할 수 있음
  • ts.resample( ).sum( )
  • Series.tz_localize( )
  • Series.tz_convert( )
  • Series.cat( )
  • df.to_csv('폴더명/파일명', encoding='utf-8', index=False)
    - csv file로 저장
  • df=pd.read_csv('폴더명/파일명') 
  • pd.read_csv( )
  • df.to_excel( )
    - excel file로 저장할 때 사용
    - conda install openpyxl 설치
    - df.to_excel('폴더명/파일명')
  • pd.read_excel( )
    - excel 로 읽을 때 사용

# for 문 사용시 pandas mehod를 찾아보고 사용  
# shift + tap 누르면 설명 나옴(Jupyter)

 

Open CV

  • 인텔에서 개발한 오픈소스 컴퓨터비전 라이브러리
  • 기본적으로 이미지나 영상에 변화를 주고 검출을 하고 사물을 인식하는 알고리즘을 개발해서
    의료산업계나 A.I / 자율주행쪽에서 활발히 쓰이는 기술
  • [[Basic]]
    - 이미지 데이터는 본래 개별 원소로 이루어진 행렬의 집합
    - 여기서 개별 원소는 픽셀(pixel)이라고 할 수 있으며 개별 원소의 값은 픽셀의 강도라고 할 수 있음
    - 픽셀의 강도는 0(검정)부터 255(흰색) 사이의 범위를 가지고 있음
    - 컬러를 이미지를 읽기 위해서는 imread() 메소드에 cv2.IMREAD_COLOR 매개변수를 넣어주면 됨
    - 주의할점은 OpenCV는 기본적으로 이미지를 BGR타입으로 읽음
    - 하지만 Matplotlib등 대부분의 이미지 라이브러리는 RGB타입을 사용하기 때문에 BGR 타입으로 변경해 주는 것이 좋음
    - array(배열)은 데이터를 저장하기위한 다차원 배열
    - array를 다루는 대표적인 library는 Numpy
    - shape의 속성은 Numpy 배열의 차원을 설명하는 속성
    - e.g. 
      [[1,2,3]
       [4,5,6]
       [7,8,9]]
     --> 이 array는 shape(3,3)인 3개의 행과 3개의 열로 이루어진 2차원 배열
    --> 숫자의미는 가로/세로 pixel이 각각 3이면서, 2차원이니 gray 
    - 컬러 이미지 개념
     --> 480 * 640 인 행렬이 3개 합쳐져 있다고 생각하면 됨 

  • 참고자료: https://docs.opencv.org/4.6.0/
 

OpenCV: OpenCV modules

OpenCV  4.6.0 Open Source Computer Vision

docs.opencv.org

  • 설치방법: pip install opencv-python

Image 불러오기

- imread: 읽겠다 --> cv2.imread('파일경로', 출력타입)
- imshow: 보여줘
- waitKey( ): camel scape / 실제영상이 뜨는 method
- destroyAllWindows( ) : 닫는 기능 

- q 입력시에만 닫히게 만들기

  • matplotlib 실행 방법

bgr_img (rgb_img를 입력하면 rgb image가 출력됨)

  • cv2.cvtColor(bgr_img, cv2.COLOR_BGR2RGB)
    plt.imshow(rgb_img); --> rgb image로 변환 됨
    - cv2는 
    - cvtColor() : OpenCV에서 이미지의 색 공간을 변환하는 함수. 색상 공간 변환은 이미지 처리 및 컴퓨터 비전에서 중요한 작업으로, 한 색상 공간에서 다른 색상 공간으로 이미지를 변환할 수 있음
    - cv2.COLOR_: BGR에서 RGB로의 컬러 변환을 수행하는 상수
    - plit: matplotlib 실행 시 사용
  • imwirte: image file 종류 전환 시 사용
  • imread('file 명', IMREAD_GRAYSCALE):  
  • cmap 
    - colormap을 의미. colormap은 이미지를 표시할 때 각 픽셀의 값을 색으로 매핑하는 방법을 말함.
    - 예를 들어, 'gray'로 설정하면 흑백 이미지를 표시하며, 각 픽셀의 밝기에 따라 서로 다른 회색조 색상을 사용하여 이미지를 표현.

Image 생성

  • numpy로 image 생성하기

  • Image 부분추출
    - slicing을 이용해 image를 부분추출하기 
    - plt.imshow(img[y축 시작점:끝점, x축 시작점:끝점]);

OpenCV 그리기 함수

  • 이미지에 선, 도형, 문자열을 출력하는 그리기 함수 제공
  • 선 그리기 : 직선, 화살표, 마커 등
  • 도형 그리기 : 사각형, 원, 타원, 다각형 등
  • 문자열 출력 (영문)
  • 원본 영상이 필요하면 복사본을 만들어서 작업
  • 그레이 스케일 영상에는 컬러로 그리기 불가  cv2.cvtColor() 함수로 컬러 영상으로 변환한 후 작업

직선 그리기

  • img : 그림을 그릴 이미지
  • pt1, pt2 : 직선의 시작점과 끝점. (x,y) 튜플
  • color : 선 색상 또는 밝기. (B,G,R) 튜플 또는 정수
  • thickness : 선 두께. 기본값 1
  • lineType : 선 종류. cv2.LINE_4, cv2.LINE_8 (기본값), cv2.LINE_AA 중 선택
  • shift : 그리기 좌표 값의 축소 비율. 기본값 0
  • e.g. 흰 바탕에 직선 그리기
    - np.ones((400,400,3)) : 너비가 400, 높이가 400 이며, 픽셀이 3개의 값을 가지는 이미지를 생성
    - np.ones((400,400,3), np.uint8): 0~255 까지의 값을 나타내는 부호없는 8비트 정수 데이터 형식
    - np.ones: 모든 픽셀을 1로 채워서 흰색을 나타냄
    - img: 선을 그릴 이미지
    - (50, 50): 선의 시작점 좌표
    - (200, 50): 선의 끝점 좌표
    - (0, 0, 255): 선의 색상을 나타내는 BGR 형식의 튜플
    - 5: 선의 두께 

Image의 밝기 조절을 위한 영상의 덧셈 연산

  • src1 : (입력) 첫 번째 영상 또는 스칼라
  • src2 : (입력) 두 번째 영상 또는 스칼라
  • dst : (출력) 덧셈 연산의 결과 영상
  • mask : 마스크 영상
  • dtype : 출력 영상 타입 (ex. cv2.CV_8U, cv2.CV_32F 등)
  • e.g. Image의 밝기조절