181102-TodayWhatILearned

181102 TWIL


오늘 한 일은 무엇인가

  1. Database - MySQL 공부
  2. A * 알고리즘 스터디
  3. NaN 값 처리에관한 자료 서칭

내일 할 일은 무엇인가

  1. Project 모임
  2. Pandas 라이브러리 정리
  3. miniProject Crawling 코드짜기
  4. A * 알고리즘 짜기

무엇을 느꼈는가

  • 오늘 스터디에서 A* 알고리즘를 주제로 얘기를 좀더 나누었다. 각자 공부해오신 내용을 바탕으로 알고리즘의
    흐름이 어떻게 되어가는가 좀더 구체적으로 생각해보고자 했다. 좀더 해결법에 가까워진 느낌을 받았으나,
    이제는 좀더 구체적으로 구현해보면서 다가오는 문제들을 해결해보고자 했다. 모든걸 완벽하게 이해하고 실현하는
    것만이 답은 아니기 때문이라고 생각한다.
  • 주말동안은 프로젝트, 미니프로젝트, 알고리즘 적용 코딩, 수학 공부, DB공부.. 산더미지만 하나씩 그어나가
    야겠다.

181101-TodayWhatILearned

181101 TWIL


오늘 한 일은 무엇인가

  1. Project 모임
  2. Data 일부 전처리
  3. Crawling 공부

내일 할 일은 무엇인가

  1. Database - MySQL 공부
  2. Pandas 라이브러리 살펴보기
  3. miniProject Crawling 주제 선정, 코드짜기

무엇을 느꼈는가

  • 프로젝트 모임에서 우리가 예측할 Data (Departure Delay)를 정의하고, 나는 오늘 시각 data 의 전처리를 하였다. Data 들이 의미없는 값들을 가지고 있을 때 어떻게 처리해야 할지 고민하다가 확실한 답은 못얻은 채, 우선 시각 데이터의 formatting 만 바꾸었다. data들을 어떻게 채워넣어주어야 할지는 조금더 공부해 보아야 할 것 같다.
  • 첫 프로젝트 모임의 느낌이 매우 좋았다. 모임을 하기 전까지는 내가 했던 것들이 맞는가 하는 의구심과 project를 하기에는 아직 부족한 지식과 실력이라는 걱정이 앞섰다. 오늘 모임을 하면서 각자 살펴보았던 data 의 특징들과 앞으로 어떻게 data 를 다듬을 것인지 얘기하면서, 더 좋은 방향과 몰랐던 것들, 알았던 것들을 서로 나누면서 발전적인 대화가 되었다는게 매우 뿌듯하다.
  • 모임에서 받은 좋은 느낌을 이어서, 오늘 내가 맡기로한 부분을 해결하기 위해 앉았고, 또 나름 해결한 부분이 있는 것 같아 작은 성취감을 맛보았다.
  • 협업을 하기 위해 git에 관해 좀더 공부하고 나눌 필요성이 느껴졌다. 특히나 code conflict 가 실제로 발생하기 전에 어떻게 다루어야 하는 것인지 좀더 깊게 공부할 필요성을 느꼈다.

Mysql

MySQL

1. Install MySQL

1
$ cd usr/local/mysql/bin

위 경로에서

  • MySQL 서버에 접속

    1
    $ sudo ./mysql -p
    1
    mysql >
  • 패스워드 변경

    1
    2
    3
    mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY '바꾸고싶은 비밀번호';
    mysql>FLUSH PRIVILEGES;
    mysql>quit;

2. MySQL Shell Command

(1) DATABASE 생성, 접속, 삭제

  • 현재 상태 보기
    1
    mysql> STATUS
  • DB 목록 보기
    1
    mysql> SHOW DATABASES;
  • DB 만들기
    1
    mysql> CREATE DATABASE DBNAME
  • DB 접속하기
    1
    mysql> USE DBNAME;
  • 현재 접속중인 DB 확인하기
    1
    mysql> SELECT DATABASE();
  • DB 지우기
    1
    mysql> DROP DATABASE DBNAME;

(2) TABLE 생성, 추가, 삭제

  • table 만들기
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE table_name(
    column_name_1 column_data_type_1 column_constraint_1,
    column_name_2 column_data_type_2 column_constraint_2,
    .
    .
    .
    )
  • column_constraint 는 Optional 이다. (unique 와 같은 제약조건)

user 라는 table에 name, email, age 컬럼 생성

  • example1 : constraint 가 없을 떄,
    1
    2
    3
    4
    5
    mysql> CREATE TABLE user(
    name CHAR(20),
    email CHAR(40),
    age INT(3)
    )
  • example2 : constraint가 있을 때,
    1
    2
    3
    4
    5
    6
    7
    mysql> CREATE TABLE user2(
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    email VARCHAR(30) UNIQUE NOT NULL,
    age INT(3) DEFAULT'30',
    rdate TIMESTAMP
    )


(3) 수정

(3)-1. DATABASE 수정

  • DATABASE 의 encoding 수정

  • 현재 문자열 encoding 확인
    1
    mysql> SHOW VARIABLES LIKE "CHARACTER_SET_DATABASE";
  • mydb 데이터베이스의 문자열 인코딩을 utf8 로 변경
    1
    mysql> ALTER DATABASE mydb CHARACTER_SET = utf8;
  • user 데이터베이스의 문자열 인코딩을 ascii 로 변경
    1
    mysql> ALTER DATABASE user CHARACTER_SET=ascii

(3)-2. TABLE 수정

  • user 테이블에 tmp라는 컬럼명, TEXT 데이터 타입 컬럼을 추가
    1
    mysql> ALTER TABLE user ADD tmp TEXT;

181031-TodayWhatILearned

181031 TWIL


오늘 한 일은 무엇인가

  1. 선형회귀분석 공부
  2. 행렬의 미분 공부
  3. (PROJECTmini)A star Algorithm 개념 정리
  4. (PROJECT)프로젝트 진행 data 탐구
  5. 데이터 전처리 공부

내일 할 일은 무엇인가

  1. Project 모임
  2. 데이터 전처리, 데이터들의 의미 파악, 예측할 delay 부분 정의하기

무엇을 느꼈는가

  • 오늘은 아침부터 하루종일 컴퓨터 앞에 앉아 있어서, 눈과 목이 너무 아프다. 그래도 새로운 알고리즘 내용에
    관한 이해와, 앞으로 진행할 메인 프로젝트의 data들의 의미를 파악해서 뿌듯한 하루였다. Data의 의미를
    파악했으나 이것을 처리하기 위해서 numpy 와 pandas 의 documentation 을 읽으면서 데이터들을 다뤘다.
    라이브러리와 패키지들의 메소드와 클래스들을 자유자재로 다루기 위해선, 계속 사용해보면서 익혀야 함을 느꼈다.
    메소드들을 알면 복잡하게 코드를 안짜도 이미 내장되어있는 메소드로 손쉽게 처리할 수 있기 때문이다.
  • data를 혼자 곰곰히 보다, 시간에 관한 column 의 의미를 파악했으나 이것을 손쉽게 합쳐서 데이터들을
    재정렬하는데 오늘 실패했다. 의미는 파악했으니, 내일 좀더 시도해보면 시간에 관한 data 를 정리할 수 있지
    않을까 한다.

181030-TodayWhatILearned

181030 TWIL


오늘 한 일은 무엇인가

  1. 검정, 추정 부분 수식 꼼꼼히 다시 보기
  2. A star(A*) Algorithm 개념 읽기

내일 할 일은 무엇인가

  1. 선형회귀분석 정리 (패키지 별로 특징, 메서드 파라미터 위주)
  2. 데이터 전처리 부분 공부
  3. Test data 처리는 어떻게 하는 건지 공부해보기

무엇을 느꼈는가

  • 추정부분 수식을 공부하면서 eigenvalue 부분이 기억이 잘 안나던 것을 시간이 될 때 자료들을 챙겨봐야겠다.
  • 오늘 공부한 선형 회귀분석을 배우니 조금이나마 프로젝트를 어떻게 진행해야되는 건지 감이 잡힌 것 같다. 미약한
    시작을 하기위해 오늘 공부한 개념들을 사용해서 여러가지 돌려보고 데이터를 파악해볼 수 있을 것 같다.
    하지만, 우리가 가지고 있는 데이터셋이 바로 적용 할 수 없는 현실적인 데이터이기 때문에, 여러가지 전처리
    작업이 필요할 것 같다. 오늘 배운 것을 적용해보기 위해 내일은 데이터 전처리를 공부해보고, 또한 test data의
    생성 역시 공부해보아야할 부분인 것 같다.

181029-TodayWhatILearned

181029 TWIL


오늘 한 일은 무엇인가

  1. 자료구조 Binary Tree, Stack 으로 Queue구현, Stack 응용
  2. 추정 부분 복습
  3. 스터디 나갈 방향 이야기
  4. A star algorithm search

내일 할 일은 무엇인가

  1. ‘추정’에서 수식 부분 다시 보기

무엇을 느꼈는가

  • 스터디 첫 모임을 가졌다. 프로그래밍에 관해 알고있는 것들을 활용하고 응용하는 쪽으로 어떻게 하면 될지 많은 의견을 나누었다. 상상의 나래를 펼치니, 타오르는 열정과 함께 만들어보고 싶은 것은 많았으나…. 아직 아는게 많지 않기에.. 다시 현실에 눈을 돌렸다.
  • Maze 문제에서 다른 알고리즘을 통해 구현해보려고 의견이 모아졌다. 직접 찾아서 적용해보는 첫 algorithm 이기에, 직접 찾아가면서 공부하고, 이것을 적용하는 경험을 통해 또 다른 배울 것이 있을 것 같아 매우 기대된다.

181028-TodayWhatILearned

181028 TWIL


오늘 한 일은 무엇인가

  1. 검정과 추정 공부
  2. Blog 테마 수정

내일 할 일은 무엇인가

  1. ‘추정’에서 수식 부분 다시 보기
  2. (Study) 데이터 구조 강의 듣기

무엇을 느꼈는가

  • MaximumLikelihood 를 실제로 손으로 써가며 풀어보는 과정에서, 지금까지 배웠던 수학적 테크닉들이 모두 쓰이는 것을 보고 뿌듯하면서도 재미있었다. 뿌듯한 이유는 아마도 한줄 한줄 써가는 내용이 여태 공부한 수학 개념들로 이루어진것 때문일 것이다. 그 중에서도 다음 식을 전개하는 과정에서 눈에 잘 들어오지 않아 전개하지 못할 때도 있었다. 이것은 아마 앞부분 개념이 그 순간에 적용이 되지 않기 때문이라고 생각된다. 행렬의 내용중 몇가지 특성들과 라그랑주 멀티플라이어에 대한 수식을 틈이 생길떄 챙겨서 봐야겠다.

  • 오늘은 수학을 공부하느라 프로그래밍은 하지 못했다. 중간에 졸린 걸 해소해보고자 블로그 테마 색깔 수정과 그 수정을 위해 블로그의 코드 구조를 본게 전부 였다. 30분 푹빠져서 하다가 주객전도 되지않으려 다음으로 미뤘다.

  • 위 주제들에 관해 알게된 것도 많은 하루였고, 뿌듯한 하루였다.


181027-TodayWhatILearned

181027 TWIL

오늘 한 일은 무엇인가

  1. 확률 수학 공부
  2. 자기전 (스터디)데이터구조 부분 1강 듣기

내일 할 일은 무엇인가

  1. 확률분포를 다시 복습하면서 검정, 추정에서 이어지는 부분 꼼꼼히 공부
  2. 데이터 구조 강의 수강 계획 세우기

무엇을 느꼈는가

  • 검정방법론에 대해 좀더 꼼꼼히 보았다. 수학적인 수식들은 수업시간에 다 이해가 되는 편이지만 이 수식들을
    말로써 표현하고, 글로 풀어쓰는 순간 머리가 빠릿빠릿 안돌아가는 느낌이어서, 한단계한단계 논리적으로 따져가며
    공부하니 이제야 좀 편해진것 같다. 가설 검정 같은 때에도, 말로 풀어쓰는 것 보다 간단하게 수식으로 표현하고,
    각각의 p-value 를 확인한뒤 원래 작성했던 H_0, H_a 에 대해 생각해보면 쉽게 되었으나 이것을 말로 표현하고
    글로 구성하려고 하니 간단한것도 복잡하게 생각했던 것 같다. 결국 내가 알게 된것을 상대방과 논의하고
    앞으로 만나게 될 클라이언트들을 대상으로 설명해야하는 것이 모두 이런 부분에서 시작되는 것임을 느꼈기에,
    내 생각과 가정 -> 수식으로 표현 -> 다시 말 혹은 글로 표현 하는 것을 습관처럼 해야겠다.

Scrapy

Scrapy

공부한 내용을 스스로 보기 쉽게 정리한 글입니다.

  • Scrapy 라이브러리는 파이썬에서 제공하는 라이브러리로써, 대량의 페이지들의 Crawling을 손쉽게 해주는 라이브러리이다.

1. Install

  • 파이썬의 라이브러리 이므로 pip 으로 설치 할 수 있다.
    1
    pip3 install scrapy

2. 실습

  • 실습을 위해 import 할 것들
1
2
3
import scrapy
import requests
from scrapy.http import TextResponse
  1. requests 를 통해 url 정보를 받아온다.
  2. TextResponse 를 통해 받아온 html 파일을 encoding 과 text형식으로 return
1
2
req = requests.get("url_name")
response = TextResponse(req.url, body=req.text, encoding="utf-8")
1
2
3
4
5
6
a = response.xpath('xpath')
# xpath 로 지정한 엘리먼트를 가져온다.
a_text = reponse.xpath('xpath/text()')
# 엘리먼트의 text data 를 가져온다.
a_text.extract()
# 엘리먼트의 text data들을 말그대로 extract 하여, list 형태로 return 해준다

3. Scrapy 사용하기

(1) scrapy 프로젝트 생성

  • shell command
    1
    scrapy startproject crawler
1
!scrapy startproject crawler
New Scrapy project 'crawler', using template directory '/Users/emjayahn/.pyenv/versions/3.7.0/envs/dss/lib/python3.7/site-packages/scrapy/templates/project', created in:
    /Users/emjayahn/Dev/DSS/TIL(markdown)/crawler

You can start your first spider with:
    cd crawler
    scrapy genspider example example.com
1
!tree crawler
crawler
├── crawler
│   ├── __init__.py
│   ├── __pycache__
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
│       ├── __init__.py
│       └── __pycache__
└── scrapy.cfg

4 directories, 7 files

(2) Scrapy 기본 구조

  1. Spider

    • 크롤링 절차 정하기
    • 어떤 웹사이트들을 어떻게 크롤링 할 것인지 선언
    • 각각의 웹페이지의 어떤 부분을 스크래핑 할 것 인지 명시하는 클래스
  2. items.py

    • spider 가 크롤링한 data 들을 저장할 때, 사용자 정의 자료구조 클래스
    • MVC : 중 Model 부분에 해당
    • Feature 라고 생각
  3. pipeline.py

    • 스크래핑한 데이터를 어떻게 처리할지 정의
    • 데이터에 한글이 포함되어 있을 때는 encoding=’utf-8’ utf-8인코딩이 필요
  4. settings.py

    • Spider, item, pipeline 의 세부 사항을 설정
    • (예) 크롤링 빈도 등
    • (예) robots.txt - ROBOTSTXT_OBEY=True

Xpath

xpath

공부한 내용을 스스로 보기 쉽게 정리한 글입니다.

1. xpath란?

  • xpath = XML Path Language
  • XML 문서의 element나 attribute의 value에 접근하기 위한 언어
  • XML 문서를 해석하기 위한 언어이므로, 기본적으로 path expression 이 바탕이 되어있다.
  • 연산, 문자열 처리를 위한 라이브러리를 내장하고 있다.

2. Location Path

  • element 를 찾으러 가는 것이므로, location을 나타내기 위한 연산자는 다음과 같다.
  1. element_name : element_name 과 일치하는 모든 element를 선택한다.
  2. / :
    • 가장 처음 쓰는 /는 절대경로를 의미한다.
    • Path 중간에 쓰는 /는 조건에 맞는 바로 다음 하위 엘리먼트를 검색한다. (css selector에서 >와 같다)
  3. // : 가장 상위 엘리먼트
  4. . : 현재 엘리먼트
  5. * : 조건에 맞는 전체 하위 엘리먼트를 검색한다(css selector 에서 한칸 띄우는 것 과 같다)
  6. element[조건] : 엘리먼트에 조건에 해당되는 것을 검색한다
    • (예) p[2] : p 엘리먼트 중 두번째 엘리먼트를 선택 **주의:1부터 시작, 0이 아님 **
    • (예) [@(attribute_key="attribute_value")] : 속성값으로 엘리먼트를 선택
      [@id="main"] : “main” 이라는 id 를 선택
      [@class="pp"] : “pp” 라는 class 를 선택
  7. not(조건) : 조건이 아닌 엘리먼트를 찾는다.
  8. /text() : 해당 엘리먼트의 text 데이터를 가져온다
  9. /@attribute_name : 해당 엘리먼트의 attribute_name 에 할당된 value 값을 가져옴
    • /@href : 해당 엘리먼트의 href의 value 값을 가져옴