본문 바로가기
부트캠프(LIKELION AIS7)/수업

[AI스쿨 7기, 5주차] 데이터타입, downcast, parquet, 미니프로젝트리뷰

by aimaimee 2023. 4. 21.

멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의(0307번 파일 복습 sns.barplot과 plotly의 histogram 연산, 범주형데이터와 수치형데이터/ 0308번 파일 : 데이터타입, downcast, 메모리 용량 줄이기 / 0309번 파일 : csv와 parquet / 미니프로젝트리뷰 / streamlit)

221017

0307 실습파일 복습

Q. 가지고 있는 컴퓨터나 노트북을 이용해서도 가능한데, 왜 굳이 클라우드 서비스를 이용하는지?
Q. 처방데이터는 대부분 숫자로 되어 있을까? 데이터 용량을 줄이기 위해서, 인코딩 에러를 방지
Q. pd.to_datetime으로 데이터 형식을 변경해 준 이유? 월, 일, 요일 등의 파생변수를 만들기 위해서
Q. df.describe에서 top? 최빈값, frequency는 최빈값의 빈도수
Q. 히스토그램에서 범주형, 수치형 데이터를 구분할 수 있는 기준? 그래프의 모양이 중간중간 빠져있다면, 연속된 수치 데이터라기보다 범주형 데이터에 가깝다.

  • 투약량, 총투여일수, 금액은 연속 데이터이다.
  • np.zeros_like() : 0으로 채워진 배열
  • np.ones_like() : 1로 채워진 배열
  • 투여경로별 평균단가는 barplot이나 pointplot이 적합하다.
  • countplot은 x, y 둘 중 하나만 설정하고, 나머지 축에는 빈도가 표시된다.

Q. sns.barplot 에는 연산 기능처럼, plotly 에서 barplot 처럼 연산을 할 수 있는 그래프는? 히스토그램. hisfunc="sum"과 같이


0308 실습파일

Q. int8은 왜 Byte (-128 to 127) 범위로 숫자를 표현할 수 있을까? 2의 8제곱, 256, 음수 양수 반으로 쪼개고 0 포함
Q. uint8의 의미는? 음수 없는 범위
Q. 가입자 일련번호 int64. 최소값은 666668, 최대값은 999987 이고 앞으로 음수는 사용하지 않는다고 가정할 때 어떤 데이터 타입을 사용? uint32
Q. 성별코드의 적당한 데이터 타입과 크기는?
Q. pd.to_numeric 어디에서 사용? 데이터 타입을 강제로 숫자로 바꾸기 위해서(아파트실습파일)

  • pd.to_numeric(df["성별코드"], downcast="unsigned")를 다시 성별코드에 넣어주어야 한다. unsigned하면 uint8로 바뀐다.
  • 88.1에서 83.0 MB로 줄어들었다.
  • df[col].dtypes 해도 되고, dtypes.name해도 된다.
  • 조건문과 반복문 활용 downcast 타입 변경
    • .startswith("int") : 0보다 클 때 unsigned, 아니면 integer
    • .startswith("float") : float로 하면 float64가 float32로
    • dtype_name == "bool" : df[col].astype("int8")
    • object는 category
  • csv : comma seperated values / tsv : tab separated values
  • 게시판의 내용일 때는 category 형태가 적합하지 않다. 범주형일때 category로 하면 효율적으로 사용할 수 있는데, 게시글의 내용처럼 범주의 수가 많다면 적합하지 않다.
  • df.dtypes[0] -> dtype("uint16")
  • df.dtypes[0].name -> "uint16"
    cf) columns.name="company" 처럼 name 값을 가져온다.

Q. 왜 우리는 downcast 실습을 했을까? 메모리 용량을 줄이기 위해, 큰 데이터를 다루기 위해


미니 프로젝트2 리뷰

  • 시각화를 할 때 지역이 너무 많아서 그래프에 비교가 안된다면, 일부 지역만 추출해서 그려보는 것을 추천한다.
  • 여성, 남성을 unstack 해서 색깔을 다르게 그려주는 것을 추천
  • plotly : px.line해서 잘못 그려진 경우에는 집계를 해서 넣어줘야 한다. 아니면 각 데이터를 다 넣어준다.
  • seaborn은 line 그래프가 mean이 기본값인데 plotly는 집계하지 않고 개별 데이터를 다 표현한다.
  • px.bar로 그려도 차이는 없지만(bar는 관측치를 쌓아 올린 것이기 때문에) px.histogram이 더 적합하다.
  • 넷플릭스나 쇼핑몰은 컨텐츠나 제품이 많아질수록 이용도 는다.
  • 성별에 전체, 남자, 여자가 있다면 전체를 제외하고 구하면 좋다.
  • 코시스 데이터는 미리 구해진 합계나 소계값을 주의하기.

0309번 실습 파일

Q. csv와 parquet의 차이점 : csv는 , 로(행단위) 데이터를 구분하고 parquet는 열단위로 구분
Q. 행단위와 열단위의 차이? : 열 단위 압축은 동일한 데이터 타입이기에 유리하고, 저장 공간을 절약

  • 막대가 길수록 빠르다.(시간으로 따졌을 때 얼마나 읽을 수 있는가)
  • to_parquet( , compression="gzip") : parquet을 쓰려면 pyarrow, fastparquet이 있어야 사용이 된다.
    • pyarrow-> 실패시 fastparquet 시도
    • compression : snappy, gzip, brotli : 압축효율은 gzip에 비해 snappy가 좋다.
    • 저장해보면 df.csv보다 df.parquet.gzip가 훨씬 용량이 크다. 26B < 2.35kB

Q. 왜 parquet 형식이 csv보다 용량이 크게 나올까? parquet는 메타 정보를 포함하고 있기 때문에

  • 메타데이터? : 데이터에 관한 구조화된 데이터로, 대량의 정보 가운데에서 확인하고자 하는 정보를 효율적으로 검색하기 위해 원시데이터(Raw data)를 일정한 규칙에 따라 구조화 혹은 표준화한 정보
  • 밑에서는 compression을 설정을 안 한 이유는, 기본값으로 설정되도록 하려고. default 값은 snappy
  • df.to_parquet() , df.to_csv()
  • os.stat("파일명").st_size로 파일 사이즈 확인
  • 파일 사이즈에 대한 감을 익히기 위해 파일 단위 구하는 실습을 한다.
  • def convert_bytes(num) : 1024보다 작다면 bytes로 표시, 아니라면 for문을 돌면서 KB, MB 등으로 표시할 수 있도록
    • 10진 측정값으로 구하고 싶다면 1024가 아니라 1000으로 나눠준다.
  • def compare_csv_parquet(df) 파일 저장 후 사이즈 비교
    • %time pd.read_csv(file_path_csv)
    • %time pd.read_parquet(file_path_parquet)

Q. 대용량 파일을 다룰 때 메모리를 절약할 수 있는 방법 downcast
Q. 파일 압축효율을 높일 수 있는 방법 parquet


09번 강의 파일

  • streamlit 대시보드 만들기
  • Q. 대시보드는 왜 만들까? 적은 코드로 그럴듯한 결과물

퀴즈

10/10문제

  1. 맞았지만 기억할 것
  • 6번 문제 : 파일 단위 M(메가)는 10의 몇 승 : 6승
  • 7번 문제 : 파일 크기에서 K단위는 10의 3승. 이진법으로는 2의 몇 승? : 10승
  • 8번 문제 : num=123456일 때, 출력되는 파일 사이즈 단위는? KB
  • 9번 문제 : 판다스에서 데이터 타입의 크기를 변경하여 메모리를 효율적으로 사용할 수 있는 방법은? pd.to_numeric(downcast)
  • 10번 문제 : .py 확장자 파일을 편집하기에 적절한 편집기는? : VS Code

댓글