machine Learning_basic

machine learning

Decision tree learing



  • Decision tree 란

관측값과 목표값을 연결 시켜주는 예측 모델

통계학과 데이터 마이닝, 기계학습에서 예측모델링으로 사용하는 방법

데이터 기능에서 유추된 결정규칙을 학습하여 대상 변수값을 예측 하는 모델을 만들기 위해 사용

종류

  • 분류 트리

    • 변수가 유한한 수의 값을 가지는 것, 클래스 출력
    • Leaf node는 클래스 라벨을 나타내고 가지는 클래스 라벨과 관련있는 특징들의 논리 곱을 나타낸다.
  • 회귀트리

    • 목표변수가 연속하는 값(일반적으로 실수 )을 가지는 트리
    • 특정 의미를 가지는 실수값을 출력

    의사결정 분석에서 결정트리는 시각적으로 명시적인 방법으로 과정을 보여준다.

결정트리의 학습

  • 결정 트리의 학습 : 자료 집합을 적절한 분할기준 또는 분할 테스트에 따라 부분집합들로 나누는 과정

    • 하향식 결정 트리 귀납법 (TDIDT_top-down induction of decision trees)
      • 순환분할 방식으로 나눠진 자료의 부분집합에 재귀적으로 반복됨.
      • 분할로 인해 더이상 새로운 예측값이 추가 되지 않거나 부분집합의 노드가 목표변수와 같은 값을 지닐대 까지 계속됨.
  • 데이터 마이닝에서 결정트리

    • 수학 적으로 표현됨

예를 들어 아래와 같은 데이터 마이닝에서의 결정 트리가 있다고 가정 해 보자.

( f{x},Y ) = (x_1, x_2, x_3, ..., x_k, Y)

종속 변수 Y는 분류를 통해 학습하고자 하는 목표 변수이며, 
벡터 x는 {  x_{1}, x_{2}, x_{3} } x_1, x_2, x_3 등의 
입력 변수로 구성된다.

장점

1. 이해하기 쉬우며 시각화 가능
2. data 준비가 거의 필요하지 않음
3. 수치형, 범주형 data를 모두 처리 가능
4. multi-output problems를 다룰 수 있다. 
5. a white box model을 사용 할 수 있다. (bool 가능)
6. 통계 검정을 사용하여 모형을 검증하기 때문에 모델의 신뢰성을 설명할 수 있다.
7. 생성된 데이터가 실제 모형에 의해 가정이 다소 위반되더라도 잘 수행된다.

단점

  1. data 일반화가 잘 되지 못하면 복잡한 트리가 만들어짐 (과적합)
     - 가지치기, 리프노드에 필요한 샘플 최소화, 트리 최대깊이 설정 으로 해결 가능
    
  2. variation이 작은 경우 의사결정트리가 불안정 할 수 있다.
    • 앙상블(ensemble) 내에서 의사결정 트리 사용으로 해결 가능.
    • 실용적인 의사 결정 트리 학습 알고리즘은 각 노드에서 국소적으로 최적의 의사결정이 이루어지는 그리디 알고리즘과 같은 경험적 알고리즘을 기반으로 한다. 이러한 알고리즘은 전역 최적 의사 결정 트리를 반환한다고 보장할 수 없다.
    • 이는 특징과 샘플이 교체와 함께 무작위로 샘플링되는 앙상블 학습기에서 여러 트리를 훈련시킴으로써 완화될 수 있다.
  3. 의사 결정 트리의 예측은 근사치이기 때문에 좋은 추정은 아닐 수 있다.
  4. 의사결정 트리의 최적화의 문제는 NP-complete로 잘 알려진 문제이다.
    잘 모르겠다.
  1. XOR, parity or multiplexer problems와 같이 배우기 쉽지 않은 컨셉들 때문에 표현하기 쉽지않다.
  2. 학습자가 편향된 트리르르 만들 수 있으므로, 데이터 세트의 균형을 맞춰줘야 한다.



이어지는 posting


Ref.

  1. 결정트리학습법/wiki
  2. 결정트리 국문
  3. Decusuib Trees
  4. 1.10.1
  5. 1.10.2

Making Category

---
title: "Making Category"
excerpt :"Credit card"
classes: wide
categories:
-init
tags:
-python
-title
-coding
last_modified_at: 2021-11-03
---

color 바꾸고 싶은에 안되네

https://www.color-hex.com/color/f4dcdc

become a BDS

##Big data 를 이용 할 수 있는 BioData Scientist가 되고 싶다.



생물학은 점점 디지털화되고 있으며 이제 양적인 과학 분야의 빛을 발하고 있다.

핵심 추진 요인은 생물학적 연구에서 처리량이 높은 기술 플랫폼의 확산이 증가하는 것으로,
체계적인 연구를 위해 수천 개의 조직과 유기체에 걸친
유전자, 단백질 및 기타 생물학적 부분에 대한 수백만 개의 데이터 포인트가
수집, 세척, 저장 및 통합될 수 있도록 한다.

이처럼 데이터가 풍부한 환경에서 생물학적(그리고 임상 샘플에 배치된 경우 생물의학)
연구의 미래는 데이터의 전략적 극대화 에 있다고 해도 과언이 아니다.

오늘날의 기술 환경에서 데이터 과학 및 인공지능(AI)은
이미 비즈니스 및 금융과 같은 영역에서 혁신 동력으로 작용하고 있다.
여기서 데이터 과학자는 막후에서 작업하는 대신 데이터를 실질적인
통찰력으로 변환하는 역할을 담당하고 있다.

예를 들어, 인공지능 기반 알고리즘 거래와 금융 기술(FinTech)의 주식 추천 시스템,
엔지니어링의 자동화 엔진 설계, 시스템 유지보수 및 로봇공학 등이 있다.
최근의 데이터 폭발과 이에 따른 비즈니스, 금융 및 컴퓨팅과 같은
다른 분야의 데이터 과학의 발전을 감안할 때, 우리는 특히 생물학과 관련된 영역별
문제를 다루는 새로운 변형인 빠르고 방대한 양의 데이터 생성과 함께 데이터 과학이
등장할 것으로 예상한다. 이를 “바이오 데이터 과학” 이라고 한다.

###BDS(BioData Science)에는 세 가지 핵심 분야가 있다.

  • 생물학 영역: Biology
  • 수학 및 통계 : mathematics (statistics)
  • 컴퓨터 공학 : computer science

BDS_componets.png


생물학 영역은 질병의 원인이나 유추된 바이오 마커의 진단 효용 이해와 같은 생물학적 기원에 대한 질문과 관련이 있다.

컴퓨터 과학 코어는 특히 분석할 데이터가 큰 경우 문제 해결을 위한 적절한
알고리즘 고안, 반복 처리 (예: 데이터의 큰 부분 집합에서
동일한 알고리즘 여러 번 실행) 및 데이터 저장 문제 해결과 관련이 있다.

수학 및 통계 핵심 영역은 데이터 요약, 정규화 및 모델링을 포함한 문제와 관련이 있다.
기술 및 탐색적 통계 데이터 분석이 BDS에만 국한된 것은 아니지만
(생물 통계의 필수 구성 요소이기도 하며, 더 낮은 정도로 생물 정보학이기도 함),
BDS는 빅데이터에 AI/ML을 적용하는 것에 기초한 신흥 기술을 이용한 예측에 초점을 맞추고 있다.


###바이오 데이터 과학은 다른 과학 분야와 다르지 않은 탐구 과학이다.
BDS는 단순히 기술(technology), 기계 학습(machine learning) 인공지능(AI)이 아니다.

인공지능이 여러분을 위해 그렇게 해주기를 바라는 대신, 사람의 강한 논리적 사고에 기초해야 한다.
BDS가 궁극적으로 연구의 과학이라는 이런 점에서, 전형적인 과학적 조사와 다르지 않다.

우리는 유전자 발현 변화가 정신 상태와 의미있게 상관되는지에 대한 질문에 답하도록 돕기 위해
다음의 7가지 단계를 사용할 수 있다.


가장 큰 차이점은 BDS는 낮은 처리량 또는 저전력 물리적 실험에 대한 강조를 줄이면서
의미 있는 데이터 조작 및 분석에 강력한 능력을 필요로 한다는 것이다.

데이터 과학은 다른 과학적 추구와 같은 과정으로 진행 된다.

- 조사할 질문을 먼저 선택
- 테스트 가능한 관련 가설을 확인함으로써 이 질문의 범위를 넓힘
- 가설에 답하기 위한 데이터를 얻기 위한 적절한 실험을 설계하고 현장 적용할 
- 결과를 결정하고 그 타당성, 즉 데이터가 연구 질문에 답하는 데 적합한지 여부를 평가
- 마지막으로, 모델을 배치하고 연구 결과가 반복 가능한지 확인



###데이터 분석은 복잡한 다단계 프로세스이다.
**BDS(BioData Science)**는 도전적인 분야이지만, 생물정보학이나 전산생물학과 비슷하게 어렵다.

생물학적 시스템을 측정하기 위한 기술적 플랫폼은 매우 정교하지만, 생물학적 시스템은 매우 복잡하다.
게다가 생물학적 실체를 측정하기 위해 개발된 기술적 도구는 생물학적 시스템의
구성요소가 변화하고 시간이 지남에 따라 자연스럽게 변화하는 동안 기술적 불확실성에 영향을 받는다.
바이오 빅 데이터는 이러한 문제에 대한 자연스러운 솔루션이 아니며 새로운 문제를 야기한다.


BDS_Investigation.png


BDS 데이터는 매우 많은 수의 관측에서 보존된 패턴을 식별하는 과정과 같은 데이터 과학
노력을 촉진할 수 있지만, 적절한 분석 파이프라인이 개발될 경우에만 그렇게 할 수 있다.
이 작업은 하찮지 않다. 이러한 분석 파이프라인은 데이터 수집에서 시작하여
더 높은 수준의 생물학적 해석과 통찰력을 향한 계산 및 통계 평가를 통해 계속 이어지는
다양한 접근 방식의 엔드 투 엔드 통합으로 상상할 수 있다.


  • omics 데이터의 바이오 마커 분석을 위한 단순화된 파이프라인과 관련 주요 고려 사항은 다음과 같을 수 있다.

BDS_omics.png


분석 파이프라인은 매우 유연해야 하며 연구 질문의 필요에 따라 변화해야 한다.
완벽한 지식이 부족하기 때문에 최적화와 재현성을 어느 정도 달성하기 위해 몇 단계를 왔다 갔다
반복하고 다듬는 것도 일반적이다.

예를 들어, 정규화 단계에서 두 개의 서로 다른 정규화 절차를
사용하여 매우 다르고 겹치지 않는 차등 유전자 세트를 발견했다고 가정 해 보자.
정규화 절차는 데이터에 대해 잘못된 가정을 하거나 잘못 구현되었을 수 있다.
표시된 주요 고려사항은 엄청나게 많다. 고려사항의 예와 함께 단계를 보여주는 목적은
각 단계마다 완벽한 시스템이나 파이프라인이 없지만, 각 의사결정 지점마다 이후 단계에 대한
결과를 갖는 많은 고려사항이 있음을 입증하는 것이다.

우리는 또한 특정 정규화 접근법이 다운스트림 통계 절차와 잘 작동하는지와 같은
호환성 문제나 특정 절차가 배치 효과 보정 알고리즘 및 일부 다중 시험 보정 방법과 관련된
과다 탈락 및 과다 첨가로 이어질 수 있는지 여부와 같은 문제를 걱정해야 한다.

일반적으로 좋은 결과를 보장하는 노선도나 표준 운영 절차는 없다는 점에서
BDS는 예술에 가까운 과학인 것이다.

Ref.
https://gohwils.github.io/biodatascience/biodatascience.html

Deploy gitHub blog by hexo

##github blog를 Hexo를 이용하여 deploy 해 보자.

Ref.

https://dschloe.github.io/settings/hexo_blog/

###Hexo를 이용하여 블로그를 만들어 보자

Node js를 download 해 준다.

1
$ node -v
  • Hexo를 설치 해 준다.
    • Hexo의 경우 npm을 이용하여 설치 한다.
1
$ npm install -g hexo-cli

git bash를 적당한 경로에서 들어간다.

makeBlog folder를 만들어준다.

1
2
3
4
5

$ mkdir makeBlog
$ cd makeBlog
$ hexo init myblog

hexo init 을 myblog에서 해 준다.
hexo server와 deployer를 설치 해 준다.

이를 설치 하지 않으면 에러가 날 수 있다.

1
2
3
4
$ cd myblog
$ npm install
$ npm install hexo-server --save
$ npm install hexo-deployer-git --save

BearSoup_Review

<<<<<<< HEAD

논문 리뷰

=======

c5589a672e850f5edca309f81ca50915cbf17ada

visualization by python

Visualization _python으로

[1103 학습]
시각화 연습 및 작성 코드 깃헙 블로그 및 깃헙에 올리기, 개인별로 공유

  • 시각화 올릴 때, 전체 코드 올리지 마시고,
    나눠서 올리세요. 설명 글 추가하시고여~ (예시 하단)

    산점도: 산점도란 무엇인가? 언제 쓰는가? 코드 작성 및 간단 설명
    박스플롯: 박스플롯이란 무엇인가? 언제 쓰는가? 코드 작성 및 간단 설명

오후 1시까지 1차로 한번 올려서 개인별로 공유해주세요. 홧팅요

Intro

python에서 visualiztion 하기 위해서는 많은 방법이 있다.

data Analist들은 시각화를 위해 많은 tool을 사용 하는데 우리는 SeabornMatplotlib을 이용하여 시각화를 할 예정이다.




코드 기반(python)의 data visualiztion의 장점

  • 여러 그래프 동시 작성 가능
  • 기존의 코드 재활용성
  • 데이터 그기의 제한이 없음 (RAM등의 제약조건 없을때)

Matplotlib 는 이미지 데이터와 정형 데이터(정적 그래프)를 시각화 할 수 있는데 나와 같은 비전공자들에게 시각화 문법이 조금 어렵다고 한다. 하지만 pandas data frame에서 쉽게 시각화 구현 하며, 통계(회귀선) 그래프 등을 쉽게 구현 할 수 있기 때문에 이를 배워야 한다.

seaborn의 경우 그래프가 예쁘게 나오지 않지만 비교적 간단한 코드로 시각화를 할 수 있다. 하지만, 세부 옵션을 수정 하고 싶다면 Matplotlib를 알아야 한다. 이는 내부 원리를 파악 할 수 없기 때문에 내가 감당하기 힘들다.

때문에 지금 단계에서는 Matplotlib과 seaborn의 장점을 적절하게 섞어서 시각화를 진행 해 보자.


아래와 같은 Tutorial을 진행 하면 세부 옵션을 조정 하기 쉽다고 한다.
https://matplotlib.org/stable/tutorials/index.html

matplotlib

matplotlib를 이용하여 visualiztion을 해 보자.

제일 먼저 해 주어야 할 일은 Import하여 matplotlib를 불러오고 이를 plt등의 객체에 저장 해 주는 것이다.

1
2
3
4
5
6
7
8
9
import matplotlib.pyplot as plt

dates = [
'2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05',
'2021-01-06', '2021-01-07', '2021-01-08', '2021-01-09', '2021-01-10'
]
min_temperature = [20.7, 17.9, 18.8, 14.6, 15.8, 15.8, 15.8, 17.4, 21.8, 20.0]
max_temperature = [34.7, 28.9, 31.8, 25.6, 28.8, 21.8, 22.8, 28.4, 30.8, 32.0]

위의 data는 강사님의 data를 가져 온 것이다.

data를 시각화 자료로 만들어 보자,

1
2
3
4
5
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10,6))
axes.plot(dates, min_temperature, label = 'Min Temperature')
axes.plot(dates, max_temperature, label = 'Max Temperature')
axes.legend()
plt.show()

graph

위의 표는 legend가 있고, 날짜별로 Min Temp와 Max Temp가 있는 그래프 이다.

먼저 fig, ax = plt.subplots()를 이용하여 표를 생성 한다.

이때 figure에대한 정보를 함께 생성 할 수 있는데, (nrows=1, ncols=1, figsize=(10,6)) 가 의미하는 것은 (행의 갯수 =1, 열의 갯수=1, fig size는 10X6)이다.

ax를 통하여 plot 형태의 그래프를 그리는데, (x축, y축 , label = “[name]”)의 형태로 plot을 추가 해 준다.
이때 Legend 를 생성 하고 싶다면, ax.legend()함수로 추가 해 줄 수 있다.

마지막으로 plt.show() 를 사용하여 마무리 해 준다.

물론 마지막 코드를 넣지 않아도 보여 주지만, 넣어주는 것이 인지상정이라고 한다.

1
2
3
print(fig)
print(axes)

Figure(720x432)
AxesSubplot(0.125,0.125;0.775x0.755)

위의 표인 fig의 정보를 알 수 있게 print 함수로 뽑아 봤는데 이건 무슨 말 인지 잘 모르겠다.

matplotlib로 선 그래프 그리기

아직 data를 어디에서 받을 수 있는지 잘 모르기 때문에 강사님이 다운받은 표를 그대로 가져와 보자

참조: https://pypi.org/project/fix-yahoo-finance/

1
!pip install yfinance --upgrade --no-cache-dir
Collecting yfinance
  Downloading yfinance-0.1.64.tar.gz (26 kB)
Requirement already satisfied: pandas>=0.24 in /usr/local/lib/python3.7/dist-packages (from yfinance) (1.1.5)
Requirement already satisfied: numpy>=1.15 in /usr/local/lib/python3.7/dist-packages (from yfinance) (1.19.5)
Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.7/dist-packages (from yfinance) (2.23.0)
Requirement already satisfied: multitasking>=0.0.7 in /usr/local/lib/python3.7/dist-packages (from yfinance) (0.0.9)
Collecting lxml>=4.5.1
  Downloading lxml-4.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (6.3 MB)
     |████████████████████████████████| 6.3 MB 7.7 MB/s 
[?25hRequirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.24->yfinance) (2.8.2)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.24->yfinance) (2018.9)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.7.3->pandas>=0.24->yfinance) (1.15.0)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests>=2.20->yfinance) (1.24.3)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests>=2.20->yfinance) (3.0.4)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.20->yfinance) (2.10)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.20->yfinance) (2021.5.30)
Building wheels for collected packages: yfinance
  Building wheel for yfinance (setup.py) ... [?25l[?25hdone
  Created wheel for yfinance: filename=yfinance-0.1.64-py2.py3-none-any.whl size=24109 sha256=25a6e16cba240e66cb4999d0947a231b790b2b96766767434407e09149ec9302
  Stored in directory: /tmp/pip-ephem-wheel-cache-a8wml444/wheels/86/fe/9b/a4d3d78796b699e37065e5b6c27b75cff448ddb8b24943c288
Successfully built yfinance
Installing collected packages: lxml, yfinance
  Attempting uninstall: lxml
    Found existing installation: lxml 4.2.6
    Uninstalling lxml-4.2.6:
      Successfully uninstalled lxml-4.2.6
Successfully installed lxml-4.6.4 yfinance-0.1.64
1
2
3
4
5
6
import yfinance as yf

data= yf.download('AAPL', '2019-08-01', '2021-08-01')
data.info()
print(yf)

[*********************100%***********************]  1 of 1 completed
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 504 entries, 2019-08-01 to 2021-07-30
Data columns (total 6 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   Open       504 non-null    float64
 1   High       504 non-null    float64
 2   Low        504 non-null    float64
 3   Close      504 non-null    float64
 4   Adj Close  504 non-null    float64
 5   Volume     504 non-null    int64  
dtypes: float64(5), int64(1)
memory usage: 27.6 KB
<module 'yfinance' from '/usr/local/lib/python3.7/dist-packages/yfinance/__init__.py'>

info() 함수를 통해 column정보와 data의 갯수, data의 type까지 알 수 있다.
date time index에 구간이 내가 정한데로 나와 있는 것도 볼 수 있다.

1
2
ts = data['Open']
print(ts.head())
Date
2019-08-01    53.474998
2019-08-02    51.382500
2019-08-05    49.497501
2019-08-06    49.077499
2019-08-07    48.852501
Name: Open, dtype: float64

ts 객체에 Open data를 담고 .head() 함수로 상위 5개의 항목을 가져와 본다.

혹시,
Pandas 에대하여 더 정리된 것을 알고 싶다면, 링크를 통해 확인 할 수 있다.

Pyplot API

아래의 예는 Pyplot API 방법을 이용하여, 한개씩 data를 넣어 준 형태 이다. 이는 객체지향으로 만들었다고 하기 어렵지만, 가능은 하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# import fix_yahoo_finance as yf
import yfinance as yf
import matplotlib.pyplot as plt

data = yf.download('AAPL', '2019-08-01', '2020-08-01')
ts = data['Open']
plt.figure(figsize=(10,6))
plt.plot(ts)
plt.legend(labels=['Price'], loc='best')
plt.title('Stock Market fluctuation of AAPL')
plt.xlabel('Date')
plt.ylabel('Stock Market Open Price')
plt.show()
[*********************100%***********************]  1 of 1 completed

graph

Pyplot API 객체지향

1
2
3
4
5
from matplotlib.backends.backend_agg
import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt

객체지향을 위해 import를 해 준다.

1
2
3
4
5
6
7
8
9
10
11
fig = Figure()

import numpy as np
np.random.seed(6)
x = np.random.randn(20000)

ax = fig.add_subplot(111)
ax.hist(x, 100)
ax.set_title('Artist Layer Histogram')
# fig.savefig('Matplotlib_histogram.png')
plt.show()

Study Pandas

Pandas



판다스란

pandas는 데이터를 시각화 하기 좋은 python base의 한 라이브러리이다.

python을 이용한 data분석과 같은 작업에서 필수적으로 쓰이고 있다.

아나콘다와 같은 IDE를 이용하여 작업 할 수도 있지만, 기본적으로 Import하여 편하게 사용 할 수 있다.


판다스의 이름은 계량 경제학에서 사용되는 용어인 **’PANel DAta’**의 앞 글자를 따서 지어졌다.
판다스는 R에서 사용되던 data.frame 구조를 본뜬 DataFrame이라는 구조를 사용하기 때문에,
R의 data.frame에서 사용하던 기능 상당수를 무리없이 사용할 수 있도록 만들었다.
더욱이 파이썬이라는 접근성이 좋은 언어 기반으로 동작하기 때문에 데이터 분석을 파이썬으로 입문하는
사람들이 필수적으로 사용하는 라이브러리가 되었다.’


판다스 Import 하기

쥬피터 노트로 설치가 가능 하다고 하지만, 구글코랩이나 케글 노트에서는 Import하여 쉽게 사용한다.

1
2
import pandas as pd
pd.__version__

pandas는 오픈소스로 누구나 무료로 이용 할 수 있고,
Numpy, matplotlib등 다른 라이브러리들과 함께 쓰인다.

일반적으로 pandas는 pd로 import되기 때문에 pd.[function] 으로 써있으면
pandas 라이브러리를 이용한다고 생각 하면 된다.

Livraly의 경우 version 오류가 많이 있으므로,
Import 해 주는 라이브러리는 version을 꼭 확인하여 오류에 대비 하도록 한다.

Pandas에는 3가지 자료 구조가 있는데
series
dataFrame,
panel 이 그것이다.

pandas에대해 더 알아보고 싶다면, 링크를 타고 가보자.

ref.

판다스/위키


판다스를 이용에는 유용한 Tutorial들이 있다.
아래 있으니 시간이 날 때마다 보면서 Update하자.

영문판이 있지만 지금은 일단 한글 번역한것을 보자
화이팅 !

판다스/doc
10 minutes to Pandas/한글

to use gitHub in Multi place

깃허브 노트북과 데스크탑 두군데서
깃허브를 동시에 사용하고 싶은 분들은
아래 코드 확인해서 해보세요.

이 때, 깃헙 blog 저장소 삭제할 필요가 없어요~

1
2
3
4
5
6
7
8
9
10
11
12

$ hexo init myblog # 여기는 각자 소스 레포 확인
$ cd myblog
$ git init
$ git remote add origin https://github.com/rain0430/myblog.git # 각자 소스 레포 주소
$ git pull --set-upstream origin main # 에러 발생
$ git clean -d -f
$ git pull --set-upstream origin main # 에러 발생 안함 / 소스 확인
$ npm install
$ hexo clean
$ hexo generate
$ hexo server

저장 해 놓고 나중에 해 봐야지 .

Lecture_python_basic

Hello World

1
2
print("Hello, world!")
print("hi ^0^")
Hello, world!

주석처리

1
2
3
4
5
6
7

# 한 줄 주석 처리
"""
여러 줄 주석 예제 동일한 따옴표(큰따옴표 혹은 작은 따옴표) 세 개와 세 개 사이에는어떠한 내용, 몇 줄이 들어가더라도 모두 주석으로 처리된다.
"""
print("Hello, world!")

Hello, world!

변수의 종류

1
2
num_int = 1
print(type(num_int))
<class 'int'>
1
2
num_float = 0.2
print(type(num_float))
<class 'float'>
1
2
bool_true = True
print(type(bool_true))
<class 'bool'>
1
2
none_x = None
print(type(none_x))
<class 'NoneType'>

사칙 연산

1
2
3
4
5
6
7
8
9
a = 3
b = 2
print('a + b = ', a+b)
print('a - b = ', a-b)
print('a * b = ', a*b)
print('a / b = ', a/b)
print('a // b = ', a//b)
print('a % b = ', a%b)
print('a ** b = ', a**b)
a + b =  5
a - b =  1
a * b =  6
a / b =  1.5
a // b =  1
a % b =  1
a ** b =  9
1
2
3
4
5
6
7
8
9
c = 3.0
d = 2.0
print('c + d =', c+d)
print('c - d =', c-d)
print('c * d =', c*d)
print('c / d =', c/d)
print('c // d =', c//d)
print('c % d =', c%d)
print('c ** d =', c**d)
c + d = 5.0
c - d = 1.0
c * d = 6.0
c / d = 1.5
c // d = 1.0
c % d = 1.0
c ** d = 9.0

논리형 연산자

1
2
3
4
print(True and True)
print(True and False)
print(False and True)
print(False and False)
True
False
False
False
1
2
3
4
print(True or True)
print(True or False)
print(False or True)
print(False or False)
True
True
True
False

비교 연산자

1
2
3
4
5
6
print(4 > 3)
print(4 < 3)
print(4 >= 3)
print(4 <= 3)
print(4 > 4)
print(4 >= 4)
True
False
True
False
False
True

논리형 & 비교 연산자 응용

1
2
3
4
5
6
#input("숫자를 입력하세요")_연습하기
data = input ("숫자를 입력하세요.")
data2 =int(data)
print(type(data2))

# class 가 달라진다. data = string , data 2 = int -> 형변환
1
2
3
4
5
6
7
8
num1 = int(input("첫번째 숫자를 입력하세요: "))
num2 = int(input("두번째 숫자를 입력하세요: "))
num3 = int(input("세번째 숫자를 입력하세요: "))
num4 = int(input("네번째 숫자를 입력하세요: "))

var1 = num1 >= num2
var2 = num3 < num4
print(var1 and var2)
첫번째 숫자를 입력하세요: 10
두번째 숫자를 입력하세요: 20
세번째 숫자를 입력하세요: 30
네번째 숫자를 입력하세요: 11
False

String

1
2
print("'Hello, world!'")
print('"Hello, world!"')
'Hello, world!'
"Hello, world!"

String Operators

1
2
3
4
5
6
str1 = "Hello "
str2 = "World "
print('str1 + str2 = ', str1 + str2)

greet = str1 + str2
print('greet * 3 = ', greet * 3)
str1 + str2 =  Hello World 

greet * 3 =  Hello World Hello World Hello World 

Indexing

1
2
greeting = "Hello Kaggle"
print(greeting[6])
K

Slicing

1
2
3
4
5
6
greeting = "Hello Kaggle"
print(greeting[:])
print(greeting[6:])
print(greeting[:6])
print(greeting[3:8])
print(greeting[0:9:2])
Hello Kaggle
Kaggle
Hello 
lo Ka
HloKg
1
greeting[13]

리스트

1
2
3
4
5
6
7
8
9
10
11
a = [] # 빈 리스트
a_func = list() #list()함수로도 빈 리스트를 만들 수 있다.
b = [1] # 숫자도 요소가 될 수 있다.
c = ['apple'] # 문자열도 요소가 될 수 있다
d = [1, 2, ['apple']] # 리스트 안에 리스트를 요소로 넣을 수 있다.

print(a)
print(a_func)
print(b)
print(c)
print(d)
[]
[]
[1]
['apple']
[1, 2, ['apple']]
1
2
3
4
5
6
a =    [1,    2,   3]
# index [[0], [1], [2]]
print(a[0]) # 첫번째 요소
print(a[1]) # 두번째 요소
print(a[2]) # 세번째 요소
print(a[-1])
1
2
3
3
1
2
3
4
5
6
7
a = [['apple','banana','cherry'], 1]

print(a[0]) # 리스트 내의 리스트
print(a[0][0]) # 리스트 내의 리스트의 첫번째 문자열
print(a[0][0][3]) # 리스트 내의 리스트의 첫번째 문자열 'apple' 중 첫번째 인덱스
print(a[0][1]) # 리스트 내의 리스트의 두번째 문자열
print (a[0][2])
['apple', 'banana', 'cherry']
apple
l
banana
cherry
1
2
3
4
5
6
7
8
9
10
11
12
13
a = [1,2,3,4,5,6,7,8,9,10]

b = a[:4] # 인덱스 0부터 3까지
c = a[1:4] # 인덱스 1부터 3까지
d = a[0:7:2] # 인덱스 0부터 6까지 인덱스 2씩 건너 띄우기
e = a[::-1] # 리스트 a의 역순
f = a[::2] # 리스트 전체구간에서 인덱스 2씩 건너띄우기

print("a[:4]", b)
print("a[1:4]", c)
print("a[0:7:2]", d)
print("a[::-1]", e)
print("a[::2]", f)
a[:4] [1, 2, 3, 4]
a[1:4] [2, 3, 4]
a[0:7:2] [1, 3, 5, 7]
a[::-1] [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
a[::2] [1, 3, 5, 7, 9]
1
2
3
4
5
a = ['alice', 'bob', 'cat']
b = ['apple', 'banana', 'cherry']
c = a+b

print(c)
['alice', 'bob', 'cat', 'apple', 'banana', 'cherry']
1
2
3
4
5
a = ['a','b','c']
b = a*3
c = a*0
print("a * 3:", b)
print("a * 0:", c)
a * 3: ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
a * 0: []

리스트 값 수정하기

1
2
3
4
a = [0,1,2]
a[1] = "b"

print(a)
[0, 'b', 2]

리스트 값 추가하기

1
2
3
4
5
6
a = [100, 200, 300]
a.append(400)
print(a)

a.append([500,600])
print(a)
[100, 200, 300, 400]
[100, 200, 300, 400, [500, 600]]
1
2
3
4
a = [1,2,3]
a.extend([40,500])
print('a.extend([40,500]) result')
print(a)
a.extend([40,500]) result
[1, 2, 3, 40, 500]
1
2
3
4
a = [0,1,2]

a.insert(1,100)
print(a)
[0, 100, 1, 2]
1
2
3
4
5
6
7
8
9
10
11
12
13
a = [0,1,2,3]
a[2:2] = [100,200]
print(a)

# 시작과 끝의 범위보다 큰 수를 덮어쓰는 예시
b = [0,1,2,3]
b[1:2] = [100,200,300,400]
print(b)

# 시작과 끝의 범위가 작을때의 예시
c = [0,1,2,3]
c[1:3] = [100]
print(c)
[0, 1, 100, 200, 2, 3]
[0, 100, 200, 300, 400, 2, 3]
[0, 100, 3]

리스트 값 삭제하기

1
2
3
4
5
6
7
8
9
a =[1,2,1,2]

#리스트의 첫번째 1이 삭제
a.remove(1)
print(a)

#리스트의 두번째 1이 삭제
a.remove(1)
print(a)
[2, 1, 2]
[2, 2]
1
2
3
4
5
6
7
8
9
10
a = [0,1,2,3,4,5,6,7,8,9]

# 1 삭제
del a[1]
print(a)

b = [0,1,2,3,4,5,6,7,8,9]
# 범위로 삭제
del b[1:3] #list는 항상 시작하는 index부터, 종료하는 n의 n-1까지의 범위를 잡아줍니다.
print(b)
[0, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 3, 4, 5, 6, 7, 8, 9]
1
2
3
4
5
6
#인덱스를 지정한 pop()
a = [0,1,2,3,4]
r = a.pop(1)

print(a)
print(r)
[0, 2, 3, 4]
1
1
2
3
4
5
6
#인덱스를 지정하지 않은 pop()
b = ['a','b','c','d']
x = b.pop()

print(b)
print(x)
['a', 'b', 'c']
d

그 외 유용한 메서드

1
2
3
4
5
a = [0,1,2,3]
print(a)

a.clear()
print(a)
[0, 1, 2, 3]
[]
1
2
a = ["Gold", "Gold", "Silver", "Silver"]
print("Silver가 처음 등장하는 인덱스 번호", a.index("Silver"))
Silver가 처음 등장하는 인덱스 번호 2
1
2
3
4
5
6
7
8
a = [1, 4, 5, 2, 3]
b = [1, 4, 5, 2, 3]

a.sort()
print("sort():",a)

b.sort(reverse=True)
print("sort(reverse=True):", b)
sort(): [1, 2, 3, 4, 5]
sort(reverse=True): [5, 4, 3, 2, 1]
1
2
3
4
b = [4,3,2,'a']

b.sort()
print(b)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-38-1624da3f09a9> in <module>()
      1 b = [4,3,2,'a']
      2 
----> 3 b.sort()
      4 print(b)


TypeError: '<' not supported between instances of 'str' and 'int'

튜플

1
2
3
4
5
6
7
8
9
10
11
tuple1 = (0) # 끝에 콤마(,)를 붙이지 않았을 때
tuple2 = (0,) # 끝에 콤마(,)를 붙여줬을 때
tuple3 = 0,1,2

print(tuple1)
print(tuple2)
print(tuple3)

print(type(tuple1)) # 콤마(,)를 붙여주지 않으면 튜플이 아닙니다.
print(type(tuple2)) # 콤마(,)를 붙여주어야 튜플 자료형 입니다.
print(type(tuple3)) # 여러개의 값 일경우 괄호를 없애주어도 튜플 자료형 입니다.
0
(0,)
(0, 1, 2)
<class 'int'>
<class 'tuple'>
<class 'tuple'>
1
2
a = (0,1,2,3,'a')
del a['a']
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-41-c41b8ecfc68f> in <module>()
      1 a = (0,1,2,3,'a')
----> 2 del a['a']


TypeError: 'tuple' object does not support item deletion
1
2
a = (0,1,2,3,'a')
a[1]='t'
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-42-04fb068f82e0> in <module>()
      1 a = (0,1,2,3,'a')
----> 2 a[1]='t'


TypeError: 'tuple' object does not support item assignment

튜플 인덱싱 및 슬라이싱 하기

1
2
3
4
t = (0,1,2,'b',4)

print(t[1])
print(t[3])
1
2
3
t = (0,1,2,3,4)
print(t[2:])
print(t[0:2])
(2, 3, 4)
(0, 1)

더하기 및 곱셈 연산자 사용

1
2
3
4
5
t1 = (0,1,2,3,4)
t2 = ('a','b','c')
t3 = t1+t2
print(t1+t2)
print(t3)
1
2
3
t1 = ('a','b')
print(t1*0)
print(t1*3)

딕셔너리

1
2
3
4
5
dic = {'teacher':'alice', 'class': 5, 'studentid': '15', 'list':[1,2,3]}

print(dic['teacher'])
print(dic['class'])
print(dic['list'])
alice
5
[1, 2, 3]
1
2
dic = {'teacher':'alice', 'class': 5, 'studentid': '15', 'list':[1,2,3]}
print(dic['real'])
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

<ipython-input-44-fd82dcc94904> in <module>()
      1 dic = {'teacher':'alice', 'class': 5, 'studentid': '15', 'list':[1,2,3]}
----> 2 print(dic['real'])


KeyError: 'real'
1
2
a = {'name': 'bob', 'job': 'farmer', 'age': 35}
a.keys()
dict_keys(['name', 'job', 'age'])
1
2
a = {'name': 'bob', 'job': 'farmer', 'age': 35}
a.values()
dict_values(['bob', 'farmer', 35])
1
2
3
4
a = {'name': 'chris', 'job': 'painter', 'age': 30}
print(a.get('name'))
print(a.get('dinner'))
print(a.get('dinner', 'empty'))
chris
None
empty

집합 연산자

1
2
3
4
5
6
7
8
s = {}
print(type(s))

s = set()
print(type(s))

s = {1,2,3}
print(type(s))
<class 'dict'>
<class 'set'>
<class 'set'>
1
2
3
4
5
6
7
a = {1,3,5}
b = {2,4,6}

c = a|b
d = a.union(b)
print("a|b:", c)
print("a.union(b)", d)
a|b: {1, 2, 3, 4, 5, 6}
a.union(b) {1, 2, 3, 4, 5, 6}
1
2
3
4
5
6
7
8
9
10
11
a = {1,3,5}
b = {2,4,6}
c = a&b
print(c)

e = {1,2,5}
f = {2,3,5}
g1 = e&f
g2 = e.intersection(f)
print("e&f:", g1)
print("e.intersection(f):", g2)
set()
e&f: {2, 5}
e.intersection(f): {2, 5}
1
2
3
4
5
6
7
a = {1,3,5}
b = {2,4,5}

c1 = a-b
c2 = a.difference(b)
print("a-b:", c1)
print("a.difference(b)", c2)
a-b: {1, 3}
a.difference(b) {1, 3}
1
2
3
4
5
6
7
a = {1,2,3,4,5}
b = {3,4,5,6,7}

c1 = a^b
c2 = a.symmetric_difference(b)
print("a^b", c1)
print("a.symmetric_difference(b)", c2)
a^b {1, 2, 6, 7}
a.symmetric_difference(b) {1, 2, 6, 7}

if 조건문

1
2
3
4
5
6
7
8
9
10
a = -5

if a>5:
print('a is bigger than 5')

elif a > 0:
print("a is bigger than 0 but a is smaller than 5 ")

else:
print("a is negative")
a is negative

반복문

1
print("Hello World")
Hello World
1
2
3
print("Hello World")
print("Hello World")
print("Hello World")
Hello World
Hello World
Hello World
1
2
for i in range(10000):
print("Hello World")
스트리밍 출력 내용이 길어서 마지막 5000줄이 삭제되었습니다.
Hello World
Hello World
Hello World
Hello World
(손으로 자름.)
Hello World
Hello World
1
2
3
4
5
6
7
a = "Kaggle"

for x in a:
print(x)

if x == 'g':
break
K
a
g
1
2
3
alphabets = ['A', 'B', 'C']
for index, value in enumerate(alphabets):
print(index, value)
0 A
1 B
2 C

Google Colaboratory file을 GitHube에 Upload하기

Google Colaboratory file을 GitHub에 바로 올리기





google Colaboratory란?


google Colaboratory (G-CLB, 구글 코랩)로 작업 했다면 이 file을 바로 gitHub blog에 올리고 싶을 것이다.
우리는 다음과 같은 과정을 통해 G-CLB file을 다른 변환 과정 없이 file 째로 올릴 수 있다.



  1. 우리에게 필요한 app은 ‘아나콘다’ 이다.

    • anaconda JupyterLab
    • Anaconda의 JupyterLab을 이용하여 변환 해 봅시다.
  2. 아나콘다의 주피터랩> file Tab에서 Export Note로 간다

    • jupyterExport
    • MarkDown file으로 다운 받아서 _post 경로에 넣어주면 완성 !!!
  3. 다른 방법도 있다. !!