- Data Science is study of data
- about
- extracting
- analyzing
- visualizing
- managine / storing
- to create insight
- insight help
- Companies to make powerful data-driven decisions
- Requires
- Unstructured data
- structured data
- Multidisciplinary filed
- CS, Math and Statistics, Domain and Business
- What Learning about?
- Exploration
- Identifying patterns in data
- Uses visualizations
- Inference
- Using data to draw reliable conclusions about the world
- Uses statistics
- Prediction
- Make infored guesses about unobserved data
- Uses Machine Learning
- Exploration
- Pros
- 수요가 많다.
- 일자리가 풍부하다
- 고수익
- 전망이 좋음
- Versatile (다재다능하다)
- Cons
- 정의가 모호
- DS 마스터는 불가능
- 도메인 지식 많이 필요
- 모호한 데이터는 예상치 못한 결과를 내놓음
- 프라이버시 문제
- need skill
- 통계, ML, 최적화 -> CS 프로그래밍 -> 시각화 -> 도메인 지식 -> 빅 데이터, 클라우드 컴퓨팅 -> 소통 능력
- DK (Domain Knowledge)
- source problem + 전문지식 + 노하우
- Data Science Process
- 문제 구성 - 명확하고, 확고한 문제 정의
- 데이터 습득 - 온라인에서 얻던가 CRM (고객 관계 관리)
- 데이터 전처리 - EDA(Exploratory data analysis)를 이용한 데이터 변형
- 수집한 데이터가 들어왔을 때, 이를 다양한 각도에서 관찰하고 이해하는 과정입니다. 한마디로 데이터를 분석하기 전에 그래프나 통계적인 방법으로 자료를 직관적으로 바라보는 과정입니다.
- 모델 계획 - 회귀, 분류 등으로 모델을 계획
- 모델 구현 - 학습, 테스트 셋으로 성능 측정
- 시각화 및 소통 - Hidden Patterns, Insight
- 배포 및 유지 - 배포, 새로운 데이터로 재학습 등
- DS Lifestyle
- 시작 (아래 네 개가 상호작용)
- 비즈니스 이해
- 모델링 (Feature Enginnering, Model Training, Model Evaluation)
- 데이터 취득 및 이해 (Data Source, Pipeline, Environment, Wrangling, Exploratioin)
- 배포 (Scoring, Performance, monitoring)
- 끝
- Data Scientist Job
- 데이터 과학자는 various tool, techniques, methodologies, algorithm을 사용하여 강력한 비즈니스 비전을 제시하기 위해 방대한 양의 데이터를 관리하는 전문가
- R, SAS, Python, SQL, Hive, Matlab ...
- 직업 분류
- Data Engineer
- 많은 데이터를 처리하기 위해 대용량 아키텍처 개발 및 유지보수
- Data Analyst
- 데이터 마이닝, 관계, 패턴, 트렌드를 찾음, 결정을 내리기 위한 분석 등
- Statistician (통계 전문가)
- 정성 정량적 데이터 수집, 분석, 이해
- Data Administrator (데이터 관리자)
- 연관된 사람이 접근하게 해야한다. 올바르게 작동해야 하고, 해킹 방지
- Business Analyst (비즈니스 분석가)
- 비즈니스 분석, 개선
- Data Engineer
- Data Scientist 한테 필요한거
- 깊은 ML, 통계, 도메인 지식
- 얕은 sw engineering, 비즈니스 감각, 분산 컴퓨팅, 소통
- DS와 BI 차이
- about
Parameter | Business Intelligence | Data Science |
Perception | Looking Backward | Looking Forward |
Data Sources | Structured Data | Structured / Unstructured Data |
Approach | Statistics & Visualization | Statistics, ML, Graph |
Emphasis | Past & Present | Analysis & Neuro linguistic Programming |
Tools | 음 | R, TensorFlow |
- Python
- IPython
- 목표
- 파이썬 shell과 상호작용 향상
- two process communication model - 여러 클라이언트가 접속, web 기반은 주피터
- 대화형 병렬 컴퓨팅을 위한 아키텍쳐
- ipython은 read-eval-print loop terminal, kernel with the fromtend interfaces
- 주피터는 ipython + 코드 실행, 노트, 멀티미디어, 대화식 이용
- 코랩은 주피터 + 협업, 추가 하드웨어, 클라우드 기반
- 목표
- 주피터와 코랩 차이
- 주피터
- local 하드웨어, 외부 gpu, tpu 안 됨, 라이브러리 설치해야함, 다운로드 말고는 공유 안 됨, 런타임 시스템 메모리에 의존, 컴퓨터에 아나콘다나 파이썬을 통해 설치되어야 함, 하드 드라이브 말고는 접근 안 됨, 하지만 자유다.
- 코랩
- 구글 서버에서 실행, gpu, tpu 제공, 라이브러리가 사전 설치됨, 다은로드 없이 공유 가능, 런타임은 구글에 의존, 아무것도 설치 안 해도 됨, 어디서든 접근 가능, 부분 공짜
- 주피터
- Table
- labeled column의 집합
- 각 행은 구분
- 열은 특성, 특성 이름은 Label이라고 함 String임, 그리고 열은 같은 길이인 array임
- 아무튼 그래서 relabeld(index, 'name') 이런 것도 있음, 새로은 테이블 형성
- 파이썬 타입은 int, float, str, Table, builtin_function_or_method
- Table에서 t.column(index or name)하면 array로 나옴
- array.item(index)하면 value 나옴
- 혹은 거기서 numpy 함수 사용 가능
- select(index or name), where(index or name), sort(index or name, descending = True (내림차순)), drop(index or name), take(row index)는 새로운 table 생성
- t.num_rows, t.num_columns는 개수 return
- numerical - 각 값이 숫자, 기온 같은거, 다른게 의미 있음
- categorical - 각 값이 음... 맑음 흐림 같은거, 다르거나 같거나
- plot은 선, scatter은 점
- 그리고 그래프 그릴 때, 데코레이션 적게, 색깔은 신중하게, 다른 색깔은 최소화 해야한다.
- 만약 데이터가 numerical이라면 값과 거리의 연관성을 보존해야한다. (과장하면 안 됨)
- 데이터는 분산을 가지고 있다. (다 다른 값이니까..)
- 근데 투표할 때 중복 투표하면 안 됨.
- bar도 있음. 각 카테고리로 보여준다.
- bar(x, y)하면 x는 세로 카테고리로, y는 가로의 범위
- hist는 numerical 변수의 분산을 보여준다.
- 아 그리고 bins = array로 구간 설정도 가능
- 구간은 퍼센트임, 이때 모든 구간의 합은 100이 되어야 한다.
- 높이 계산법 : 퍼센트 / bin 길이
- bar의 넓이 : 퍼센트 = 높이 * bin 길이
- 결론
- Line Graph (t.plot(x, y)) : sequential data (over time, ...)
- Scatter Plot (t.scatter(x, y)) : relation between two numerical var, 무조건 numerical..
- Bar chart(t.bar(x,y)) : 하나의 카테고리 분산 혹은 카테고리와 수의 관계
- Histogram(t.hist(x : numerical value)) : 분산 표시, 무조건 numerical value 만 가능..
- 함수는 이름과 argument, body, return expression으로 구성
- t.apply(function name, column name)
- t.group('column name', collect = how to combine values), 기본 값은 길이
- 그 group에 column 여러 개 넣고 싶으면 ['column 1', 'column 2'] 이렇게 해야함
- t.pivot(x, y)하면 x는 column, y는 row로 감
- pivot에도 values = , collect = 가 있음
- values는 모르겠음
- 아무튼 하나의 카테고리 변수의 분산을 보고 싶으면 group
- 두 개 이상의 카테고리 변수는 row마다 group을 하고 싶으면 group
- 한 개는 수직, 다른 건 수평으로 하고 싶으면 pivot
- t.join('a', t2, 'b') -> t의 a colum과 t2의 b column을 기준으로 합친다.
- 물론 앞에 있는 t가 앞 column에 나옴
- 그리고 joined column은 자동 정렬된다!!!!!! -> 즉 'a', 'b'가 정렬됨!!!
- 그리고 column 이름은 'a'로 된다 !!
- IPython

- t.random.choice(array, size), size 안 주면 한 개만 뽑음, size가 array len보다 길면 중복으로 뽑음
- array로 반환함
- array append 하려면 np.append(array, value or array)
- 보니까 array는 무조건 같은 타입으로 변환되는 것 같음
- 그래서 np.append도 같은 타입으로 해야함. 다른거 넣어도 약간 확장성 있게 붙임
- array.sample(size), t.sample(size) 가능
- sample_proportions(size, array)) 사이즈만큼 샘플해서 비율 반환