공부/데이터 19

[airflow] Mysql to gcs to bigquery 할 때 CSV로 저장하기

이 글은 이전에 소개한 mysql => gcs, gcs => bigquery 를 이해한 상태에서 보는 것이 도움된다. - [airflow] Mysql 데이터를 GCS(Google Cloud Storage)로 저장하기 lemontia.tistory.com/957 - [airflow] GCS(Google Cloud Storage) 파일을 BigQuery에 저장하기 lemontia.tistory.com/965 일전에 MySqlToGoogleCloudStorageOperator를 소개하면서 Json형태로 저장하는걸 소개했었는데, json은 포멧구조 상 key를 포함해야 하기 때문에 CSV에 비해 용량이 2배이상 차이난다. json 형태 {"AGE": 25, "ID": 1, "NAME": "아이유", "REG_D..

공부/데이터 2020.10.08

[airflow] 테이블 유무 확인 BigQueryTableSensor

간단하게 알아보자. airflow에는 bigquery를 수행할때 BigQueryHook을 이용하는데 여기서 제공하는 메서드 중에 hook.table_exists 라는게 있다. 해당 코드를 보면 다음과 같다 ... def table_exists(self, project_id, dataset_id, table_id): """ Checks for the existence of a table in Google BigQuery. :param project_id: The Google cloud project in which to look for the table. The connection supplied to the hook must provide access to the specified project. :ty..

공부/데이터 2020.09.10

[airflow] DAG schedule_interval에 timezone 세팅

airflow 버전은 1.10.10 을 사용중이다. (현재 기준 최신버전은 1.10.12) 유지보수를 용이하게 하기 위해 execution_date에 어떻게든 timezone에 맞춰 설정하려 했는데 몇가지 방법을 써도 전혀 되지 않았다. 알고보니 스케쥴을 실행할 때 run_id라는게 있는데, 이게 execution_date 과 달리 움직이기 때문이었다.(내부 문제인듯 싶은데....) 그래서 결론만 말하자면 UTF 기준으로 설정해야 하고, timezone은 설정되지 않는다.(화면에서 보이는 것 등은 설정이 되는거 같더만...) 아래는 과정이다. 그럼 시작. 테스트를 위해 schedule_interval 설정을 새벽 1시로 설정했다. 그래야 timezone 설정 테스트에 부합하기 때문이다. 예를들어 9월 1..

공부/데이터 2020.08.31

[pandas] 특정 key를 기준으로 groupby 한 후 해당목록 배열(dict)로 변경하기

Grid 형식의 데이터에 Key를 지정하여 관련 값을 배열로 넣고 싶을떄 쓰면 된다. 여기서는 예로 주소를 썼다. 가령 서울시에 포함되는 구들을 배열로 만들고 싶은 경우다 아래 원본데이터와 변경하고 싶은 데이터를 보면 이해될 거 같다. 이번 포스팅을 수행하기 위해 샘플 파일을 여기 첨부해두겠다. CSV 내 데이터 형태 바꾸고 싶은 문자형 { '광주광역시':['광산구', '남구', '동구', '북구', '서구'] ,'대구광역시':['남구', '달서구', '달성군', '동구', '북구', '서구', '수성구', '중구'] ,'대전광역시':['대덕구', '동구', '서구', '유성구', '중구'] ... } 그럼 pandas 를 켜서 다음을 수행한다. sample = pd.read_csv('address-sa..

공부/데이터 2020.05.30

[pandas] read_csv 사용 시 날짜를 datetime 형태로 지정하기

csv 의 특정 컬럼 중 날짜형태(yyyy-MM-dd hh:mi:ss) 로 표시되어 있어도 csv를 불러오면 object(string) 형태로 선언되어 있다. 이전까지는 padnas.to_datetime 을 이용해서 형태를 바꿨는데 데이터가 1000만 건이상이 되면 변환해주는것도 시간이 꽤 소요된다. 그래서 옵션을 추가해 처음 로드할때 부터 데이터타입을 맞추는게 더 효율적이다. read_csv를 이용할때 옵션을 주면 datetime 형태로 로드가 가능하다 이번 포스팅은 샘플파일 기준으로 작성했다. 샘플데이터는 다음과 같이 저장되어 있다. read_csv를 이용할때 옵션을 주면 datetime 형태로 로드가 가능하다 id,상품명,구매 1,아메리카노,2019-12-01 11:20:00 2,카페라떼,2019-..

공부/데이터 2019.12.10

[데이터분석] 장바구니 분석(apriori 알고리즘) 사용 및 해석하기

apriori 알고리즘을 사용하기 위해서는 다음과 같은 구조로 데이터셋이 되어야 한다. dataset = [ ['아메리카노', '카페라떼'], ['카페라떼', '아메리카노', '카푸치노'], ['바닐라라떼', '아메리카노'], ... ] DBMS에 이런식으로 데이터가 저장되어 있을리가 만무하다. 전처리를 위해 어떻게 처리하면 좋을지 이전 포스팅에 추가해두었다. https://blog.naver.com/varkiry05/221724021065 [데이터정제] apriori 알고리즘을 실행할 수 있게 데이터 변형하기 DBMS에서 바로 데이터를 뽑으면 다음과 같은 행태일 것이다.​하지만 Apriori 알고리즘을 실행하려면 ... blog.naver.com 여기서는 샘플을 만들어 진행하고자 한다. 데이터셋 샘플 ..

공부/데이터 2019.12.04

[데이터정제] apriori 알고리즘을 실행할 수 있게 데이터 변형하기

DBMS에서 바로 데이터를 뽑으면 다음과 같은 행태일 것이다. TransactionID, ProductName 1아메리카노 2카페라떼 2아메리카노 2카푸치노 3아메리카노 3카푸치노 하지만 Apriori 알고리즘을 실행하려면 다음과 같은 데이터구조가 되어야 한다 dataset = [[아메리카노] , [카페라떼,아메리카노,카푸치노] , [아메리카노,카푸치노]] 위와 같은 형태의 데이터를 뽑기 위해서는 2가지 방법이 있다. 1) DBMS에서 위와같은 형태로 뽑는다. 2) pandas 를 이용해 데이터를 가공한다. # 1번의 경우 MySQL을 이용한다면 다음 함수를 통해 구분자뽑기가 가능하다. 다만 뽑을때 구분자를 콤마로 하면 csv로 저장하여 python에서 로드할때 에러가 발생할 수 있기 때문에 여기서는 '..

공부/데이터 2019.12.02

[pandas] 특정 열(column) 문자 비교(like)

문자열 비교는 다음과 같이한다. sales['컬럼명'].str.contains('검색하고자 하는 문자열') item_name 컬럼에 진동벨이라는 문구가 포함되어 있으면 True를, 없으면 False를 리턴한다 (DBMS에서 like와 비슷한 기능) 필터(filter)하여 데이터를 뽑으려면 다음과 같이 하면 된다 # 문자열이 포함되어 있는것만 조회 sales[sales['컬럼명'].str.contains('검색하고자 하는 문자열')] # 문자열이 포함되지 않는 row 조회 sales[sales['컬럼명'].str.contains('검색하고자 하는 문자열') == False] 끝.

공부/데이터 2019.11.30

명목척도, 순위척도, 등간척도, 비율척도

명목척도(nominal scale) - 가장 낮은 수준의 척도로 이름뿐인 척도. 명목척도는 이름 또는 범주를 나타낼때도 쓴다. 남/녀, 학력(중졸이하, 고졸, 대졸, 대학원 졸) 등 구분하는 것에 의미를 갖는다. 숫자로 표현될 순 있지만 수량적 의미를 가지진 않는다. 순위척도(ordinal scale) - 관찰대상이 지니는 속성을 기준으로 상대적 크기를 나타내고 비교가 가능한 척도 말 그대로 순위를 나타내는 척도. 대표적으로 순위를 매기는 것에도 사용된다. 전교 석차라든가, 올림픽 금,은,동메달 등도 순위척도에 포함된다. 등간척도(interval scale) - 간격을 측정하는 척도 속성간의 차이를 간격을 균일하게 분할하여 측정하는 것이다. 대표적으로 온도나 시간에 관한 정보를 등간척도의 예로 다룬다. ..

공부/데이터 2019.11.26

[aws] 로드밸런서, IP고정, 세션별 접근(sticky session)

로드밸런싱을 할 때 sticky session이 필요할 때가 있다. sticky session 이란 세션을 사용하여 트래픽을 분산하는 것이다. 예를들어 웹사이트가 있는데 로그인을 하면서 session을 서버에서 생성했다. 이때 다른 서버에 접속하면 세션이 공유되지 않아 새로 로그인을 요청하게 된다. (그래서 무한 로그인 지옥에 빠지게 된다) 이러한 현상을 없애기 위해 sticky session을 이용한다. Sticky Session이란? 쿠키 또는 세션을 사용하여 트래픽을 분산하는 기능. nginx 의 경우 ip_hash 를 설정하면 비슷한 기능을 한다. 문제는 AWS에서 제공하는 로드밸런서에서 sticky session을 지원하지 않는 것이 있다는 점이다. AWS 에서 제공하는 로드밸런싱은 3가지다. ..

공부/데이터 2019.11.23 (3)

[pandas] 첫번째 행을 columns 으로 지정

다음과 같은 형태의 데이터를 변형한다 1. 행 열 전환 2. 첫번째 행을 columns 으로 지정 ​ 데이터 형식은 다음과 같다(csv 파일) 가맹점명,1일,2일,3일,4일,5일 서울점,98400,53200,63300,49400,13000 인천점,82700,19900,5500,10600,8500 경기도점,99100,42500,48000,83100,73700 jupyter notebook 으로 실행 import pandas as pd dt = pd.read_csv('sample.csv') dt 행 열 전환 dt1 = dt.transpose() dt1 첫번째 행을 column으로 지정 dt2 = dt1.rename(columns=dt1.iloc[0]) dt2 첫번째 행을 삭제한다 dt3 = dt2.drop(..

공부/데이터 2019.11.22

[python-numpy] 차원 수정(reshape)

- 1차원, 2차원 만들기 - 1차원 -> 2차원으로 변형 - 2차원 -> 1차원으로 변형 1차원 만들기 np.arange(10) # 결과 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 2차원 만들기 np.zeros((3,2)) # 결과 array([[0., 0.], [0., 0.], [0., 0.]]) 데이터 형태를 살펴보면 float 형태로 만들어졌음을 확인할 수 있다 np.zeros((3,2)).dtype # 결과 dtype('float64') 만약 유형을 고정하고 싶다면 다음 옵션을 준다 array2 = np.zeros((3,2), dtype='int') print(array2) print('---') print(array2.dtype) # 결과 [[0 0] [0 0] [0 ..

공부/데이터 2019.11.05

[python] 공공데이터 API호출 및 pandas 로 변환하기

공공데이터 홈페이지 https://www.data.go.kr/ 공공데이터포털 국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Dataset)와 Open API로 제공하는 사이트입니다. www.data.go.kr '상권정보'로 검색하면 다음과 같은 결과가 나온다. 각각 데이터를 제공하는 방식이 다른데, 위의 파일데이터는 csv나 xls 등 파일로 제공한다는 것이고, 아래가 API를 이용해 호출하는 것이다. 이번 글은 API에 관련된 것이니 아래것을 참조한다. End Point는 도메인의 root 경로다. 해당 API의 모든 경로는 저 경로에서 시작한다고 보면 된다. 데이터포..

공부/데이터 2019.11.03 (4)

[NLP] 형태소 분석기 mecab 설치하기(mac)

자연어 처리에서 형태소 분석을 위해 사용되는 mecab를 설치하는데 겪었던 시행착오를 여기에 정리해둔다. ​ python jupyter 에서 mecab 를 실행하면 다음과 같은 에러가 발생했다. from konlpy.tag import Mecab tagger = Mecab() --------------------------------------------------------------------------- NameError Traceback (most recent call last) /usr/local/lib/python3.7/site-packages/konlpy/tag/_mecab.py in __init__(self, dicpath) 106 try: --> 107 self.tagger = Tagge..

공부/데이터 2019.10.19

[pandas] loc 와 iloc 차이

iloc : integer position을 통해 값을 찾는다. ​ loc : label을 통해서 값을 찾는다. ​ 문법 공통점: df1.loc[[행],[열]] ​ ​ 단순 row만 필터할 땐 둘다 행열에는 숫자를 입력받으므로 동일하게 사용할 수 있다. ​ 공통점 예제: df1.loc[:2] 또는 df1.iloc[:2] column(열)을 필터할때엔 사용법이 각각 다르다. ​ 각각의 샘플을 해보면 다음과 같다 ​ - loc의 경우 df1.loc[:2, ['Survived', 'Pclass','Name']] - iloc의 경우 df1.iloc[:2,1:4] 사용한 샘플 데이터는 여기에 올려둔다(csv파일)

공부/데이터 2019.10.09