반응형

Index

1. append

 

2. concat

      1_위 아래 결합하기

      2_좌우 데이터 결합하기

 

3. group by


Pandas 기초 2 - append,  concat, group by

 

들어가기 전에...

 

먼저 데이터에 이름과 나이가 들어간 모듈을 만들어 놓고, 

import해서 필요한 데이터를 만들겠습니다.

 

#모듈 만드는 법 

[코드예제]

import random
import numpy as np

# 이름을 랜덤으로 출력하는 함수
def get_name():
    names = ["na1", "na2", "na3","na4", "na5", "na6", "na7", "na8", "na9", "na10"]
    return random.choice(names)

# 나이를 20세에서 40세까지 랜덤하게 출력
def get_age(start=20, end=40):
    return np.random.randint(start, end + 1)

# 나이와 데이터를 가지고, 데이터를 만들어주는 함수 
def make_data(rows=10):
    datas = []
    for _ in range(rows):
        data = {"Age": get_age(), "Name": get_name()}
        datas.append(data)
    return datas


 

 

모듈을 임포트 하여서 함수가 제대로 동작 되는지 확인하겠습니다.

 

from makedata import *

 

get_name()함수를 실행시킬때 마다 다른 이름이 나오는 것을 확인할 수 있습니다.

 

[코드예제]

get_name()

[결과] 

'na10'

 

마찬가지로 get_age() 를 실행시킬 때마다,  다른 나이가 출력됩니다.

 

[코드예제]

get_age()

[결과] 

23

 

make_data() 함수를 이용해 age / name 을 각각 5개씩 가지는 (2열 5행) 의 행렬을 만들어보겠습니다.

 

[코드예제]

df1 = pd.DataFrame(makedata(5))
df2 = pd.DataFrame(makedata(5))
df1

[결과] 

[코드예제]

df2

 

[결과] 

 

이제 만들어 놓은 행렬을 가지고, append concat, group by를 익혀보겠습니다.

 


1. append

append를 활용하여 데이터 프레임을 합쳐보겠습니다. 

사용법은 dataframe1.append(dataframe2)

 

df1과 df2를 합쳐 df3를 만들고,

df3의 3번째~7번째까지 데이터를 보겠습니다.

[코드예제]

df3 = df1.append(df2)
df3[2:7]

위아래로 데이터가 결합되어서,

df1의 데이터 3~5번째까지의 데이터와

df2의 데이터 1~2번째까지 데이터가 보여집니다.

[결과] 

여기서 알 수 있는 점은 index가 바뀌지 않았다는 것입니다.

reset_index 함수를 사용해서 인덱스를 재 정렬해보겠습니다. 

[코드예제]

df3.reset_index(drop=True, inplace=True)
df3.tail(2)

[결과] 

번거롭게 reset_index를 사용하지 않고도, 

append함수를 적용하며 바로 인덱스를 자동으로 입력할 수 있습니다.

ignore_index를 True로 설정하면 가능합니다. 

 

[코드예제]

df3 = df1.append(df2, ignore_index=True) 
df3.tail(2)

[결과] 

 


2. concat

row나 column으로 데이터 프레임을 합칠 때 사용합니다. 

 

1_ 위 아래 결합하기

기본으로 위 아래로 합쳐집니다.

 

[코드예제]

df3 = pd.concat([df1, df2]).reset_index(drop=True)
df3.tail(2)

[결과] 

 

2_ 좌우로 결합

위 아래가 아닌, 좌우로 결합하고 싶다면 axis=1 을 설정하여

좌우로 결합할 수 있습니다. 

부족한 값에 대해서는 NaN으로 자동 입력됩니다. 

 

[코드예제]

pd.concat([df3, df1], axis=1)

[결과] 

 

NaN 이 아닌, 데이터가 있는 값들만 보고 싶다면 join을 설정합니다.

 

[코드예제]

pd.concat([df3, df1], axis=1, join="inner")

[결과] 

 


3. group by

특정 컬럼의 중복되는 데이터를 합쳐서 새로운 데이터 프레임을 만들 수 있습니다.

먼저 필요한 데이터 프레임을 만들어 보겠습니다.

 

[코드예제]

df = pd.DataFrame(make_data())
df

[결과] 

 

이름이 같은 데이터가 몇개 있는지 size와 count를 사용하여 세어보겠습니다. 

[코드예제]

result_df = df.groupby("Name").size().reset_index(name="count")
result_df

[결과]

 

 

sort_values : 설정한 컬럼으로 데이터 프레임을 정렬

result_df.sort_values(["count", "Name"], ascending=False, inplace=True)
result_df.reset_index(drop=True, inplace=True)
result_df

# agg() 
# size(), min(), max(), mean()

df.groupby("Name").agg("mean").reset_index()

 

# 데이터를 요약해서 보여주는 함수 describe

df.describe()

반응형
반응형

Index

1. Pandas란?

      1_ Pandas 의 두가지 데이터 타입

      2_ Pandas  데이터 타입의 차이점

    

2. Series

      1_ Series 사용법

      2_ Series의 index설정

      3_ Series의 broadcasting(broadcasting) 

      4_ Series의 Offset index

      5_ Series의 연산

 

3. DataFrame

      1_ dictionary 안의 list로 DataFrame만들기 

      2_ list 안의 dictionary로 DataFrame만들기

      3_ DataFrame의 index 설정

      4_ DataFrame 에서 데이터 선택하기 _ row/colum/ (row, column)

      5_ DataFrame 의 수정과 데이터 추가

      6_ 컬럼 데이터 수정

 

4. Apply 함수

      1_ Apply란?

      2_ Apply 활용


Pandas 기초 1 - Series, DataFrame, apply

1. Pandas란?

데이터 분석을 위해, 만들어진 오픈소스 python 라이브러리입니다. 

 

데이터 분석을 위해 R을 사용하시는 분들도 계시지만, 분석 이외에도 다양한

활용을 위해 python의 pandas를 활용한 분석을 추천드립니다. 

 

1_ Pandas의 두가지 데이터 타입

pandas는 두가지 데이터 타입을 사용합니다. 

 

  • Series : index(행의 넘버링)와 values(값)을 가집니다. 
  • DataFrame : index와 values 그리고 columns를 가집니다. 


2_ Pandas의 데이터 타입의 차이점 

  • columns의 유무 (Dataframe만 columns를 가짐) 
  • Series는 value들의 데이터 타입이 동일해야하지만
    DataFrame 은 columns 덕분에 각각의 컬럼마다 데이터 타입이 다르게 지정 가능합니다. 


2. Series

  • 동일한 데이터 타입의 값을 갖습니다.
  • value 만 설정하면 index는 0부터 자동으로 설정 됩니다.


1_ Series 사용법

pd.series() 를 사용해서 만들 수 있습니다. 

 

[코드예제]

import numpy as np
import pandas as pd
data = pd.Series(np.random.randint(10, size=5))
data

[결과] 

0    5
1    5
2    3
3    0
4    3
dtype: int64

 

 2_ Series의 index설정

시리즈의 index 설정하는 방법은 index=list() 파라미터를 사용하여서 설정할 수 있습니다

 

[코드예제]

# index 설정
data = pd.Series(np.random.randint(10, size=5), 
                index=list("ABCDE"))
data

[결과] 

A    3
B    7
C    3
D    3
E    6
dtype: int64

 

data의 인덱스와 값을 확인해보겠습니다. 

 

[코드예제]

data.index, data.values

[결과] 

(Index(['A', 'B', 'C', 'D', 'E'], dtype='object'), array([3, 7, 3, 3, 6]))

 

인덱스를 통해 값을 확인하는 방법은 두가지가 있습니다

  • data["B"]
  • data.B  → 이 경우에는 인덱스가 "숫자"가 아닐 경우에 간편하게 사용할 수 있는 방법

[코드예제]

data["B"], data.B

[결과] 

(7, 7)

 

데이터를 수정하는 방법은 인덱스로 바꾸고 싶은 값을 지정하여 변경하면 됩니다.

 

[코드예제]

data["C"] = 10
data

[결과] 

A     3
B     7
C    10
D     3
E     6
dtype: int64

 

3_ Series의 브로드캐스팅 (broadcasting) 

하나의 배열or 요소가 어떤 특정 배열에 영향을 미칠때 배열간의 형상을 맞추는 것을 브로드 캐스팅이라고 합니다 

NumPy의 브로드 캐스팅처럼, series역시 브로드 캐스팅이 가능합니다.

 

데이터 * 10을 하면 각 값들에 *10이 되어서 나타나는 것을 확인할 수 있습니다. 

 

[코드예제]

data * 10

[결과] 

A     30
B     70
C    100
D     30
E     60
dtype: int64

 

 

4_ Series의 Offset index

오프셋 인덱스를 통해서 데이터를 선택하는 것도 가능합니다

 

3번째 데이터에서 끝까지, 2칸씩 점프하는 데이터를 선택해보겠습니다.

[코드예제]

data[2::2]

[결과] 

C    10
E     6
dtype: int64

 

처음부터 끝까지, 역순으로 데이터를 정렬해보겠습니다. 

[코드예제]

data[::-1]

[결과] 

E     6
D     3
C    10
B     7
A     3
dtype: int64


 5_ Series의 연산

시리즈의 연산에 대해서 배워보겠습니다. 

 

 

[코드예제]

data

[결과] 

A     3
B     7
C    10
D     3
E     6
dtype: int64

 

딕셔너리(dictionary)를 통해 data2를 만들어보겠습니다. 

 

[코드예제]

data2 = pd.Series({"D":3, "E":5, "F":7})
data2

[결과] 

D    3
E    5
F    7
dtype: int64

 

 

data와 data2를 더하면 같은 index끼리 자동으로 저해지는 것을 확인할 수 있습니다. 

NaN이라고 적힌 A,B,C,F 값들은 data2에 데이터가 없기 때문에 더하지 않는 것입니다. 

 

[코드예제]

result = data + data2
result # None

[결과] 

A     NaN
B     NaN
C     NaN
D     6.0
E    11.0
F     NaN
dtype: float64

이런 현상을 방지하기 위해 마스킹을 이용해 data 시리즈의 값들을 그대로 넣어주겠습니다. 

먼저 result.isnull() 을 사용해서 데이터에서 NaN 값들만 먼저 확인합니다. 

boolen값으로 True & False 값으로 출력됩니다. 

 

[코드예제]

result.isnull()

 [결과]

A     True
B     True
C     True
D    False
E    False
F     True
dtype: bool

 

true로 마스킹 된 값에  data 시리즈의 값을 지정해주면 

같은 인덱스 값들로 채워줍니다.

 

[코드예제]

result[result.isnull()] = data
result

[결과] 

A     3.0
B     7.0
C    10.0
D     6.0
E    11.0
F     NaN
dtype: float64

 

마찬가지로, F 값이 비어진 것은

시리즈 data2를 이용해서 넣어주겠습니다 

[코드예제]

result[result.isnull()] = data2
result

[결과] 

A     3.0
B     7.0
C    10.0
D     6.0
E    11.0
F     7.0
dtype: float64

 


3. DataFrame

  • 데이터 프레임은 여러개의 Series로 구성되어있습니다. 
  • 같은 컬럼에 있는 value값은 같은 데이터 타입을 갖지만, columns 마다 다른 값을 가질 수 있습니다. 
  • 데이터 프레임을 만드는 방법은 두가지 입니다. 

    -  Dictinary 안의 List
    -  List안의 Dictionary 

 

 1_ dictionary 안의 list로 DataFrame만들기 

{ } 딕셔너리 안에 [ ] 리스트로 데이터 프레임을 만들어보겠습니다. 

여기서 딕셔너리 안의 key 값이 column이 된다는 것을 확인 할 수 있습니다.

 

[코드예제]

datas = {
    "name":["joy", "collection"],
    "email":["joy@gmail.com", "collection@naver.com"],
}
print(datas)

[결과] 

{'name': ['joy', 'collection'], 'email': ['joy@gmail.com', 'collection@naver.com']}

 

 

[코드예제]

df = pd.DataFrame(datas)
df

[결과] 

 

2_ list 안의 dictionary로 DataFrame만들기

[ ] 리스트 안에 { } 딕셔너리를 통해 데이터 프레임을 만들어보겠습니다. 

여기서도 마찬가지로 key값이 column이 되는 것을 확인할 수 있습니다.

 

[코드예제]

datas = [
    {"name":"joy", "email":"joy@gmail.com"},
    {"name":"collecetion", "email":"collection@naver.com"},
]
datas

[결과] 

[{'name': 'joy', 'email': 'joy@gmail.com'},
 {'name': 'collecetion', 'email': 'collection@naver.com'}]

 

column의 순서는 자동으로 알파벳 순서로 들어가게 됩니다. 

 

[코드예제]

df = pd.DataFrame(datas)
df

[결과] 


3_ DataFrame의 index 설정

위에서 두가지 방법으로 데이터 프레임을 만들었지만, 인덱스가 설정되지 않았다는 것을

확인 할 수 있습니다. 파라미터에서 index = [] 을 사용해 인덱스를 설정해줍니다. 

 

[코드예제]

df = pd.DataFrame(datas, index=["one", "two"])
df

[결과] 

 

  • 인덱스만 확인하는 방법은 df.index를 통해서 설정할 수 있습니다. 

 

[코드예제]

df.index

[결과] 

Index(['one', 'two'], dtype='object')

 

  • column만 확인하는 방법은 df. column을 통해 확인할 수 있습니다. 

[코드예제]

df.columns

[결과] 

Index(['email', 'name'], dtype='object')

 

  • values (값) 을 확인하는 방법은 df.values를 통해 확인할 수 있습니다.

[코드예제]

df.values

[결과] 

array([['joy', 'joy@gmail.com'],
       ['collecetion', 'collection@naver.com']], dtype=object)



4_ DataFrame 에서 데이터 선택하기 _ row/column/ (row, column)

이제 데이터 프레임에서, 행row, 열column, 행렬(row, column) 을 확인하는 방법을 배워보겠습니다

 

  • 행(row) 선택 : loc 
  • 사용법 : df.loc[index] 

[코드예제]

df = pd.DataFrame(datas)
df

[결과] 

 

여기 데이터 프레임에서 .loc[1] 선택하면 두번째 행이 선택되고, 그 상태에서 

column값  [email]을 입력하면 값(value)를 확인할 수 있습니다. 

 

[코드예제]

df.loc[1]["email"]

[결과] 

'collection@naver.com'

 

 

만약에 기존 데이터에서 index가 있으면 데이터가 수정되고,

index가 없으면 데이터가 추가됩니다. 

기존에 없던 3번째 행 .loc[2]에 딕셔너리로 새로운 데이터를 입력해주니,

데이터 프레임의 3번째 행이 생기는 것을 확인할 수 있습니다.

 

[코드예제]

df.loc[2] = {"name":"blog", "email":"blog@daum.net"}
df

[결과] 

 

 

 

  • 열(column) 선택 : df[column]
  • 사용법 : df[column] 

 

[코드예제]

df

[결과] 

 

 

name 컬럼을 확인하려면 df["name"]을 입력하여 값을 확인 할 수 있습니다.

 

[코드예제]

df["name"]

[결과] 

 

row 와 마찬가지로 없는 column 에 값을 입력하면 새로운 열이 형성되는 것을 확인할 수 있습니다. 

 

[코드예제]

df["id"] = ""
df

[결과] 

 

 

비어있는 값에 range를 활용하여 값을 넣어보겠습니다. 

 

[코드예제]

df["id"] = range(1, 4) # np.arange(1, 4)
df

[결과] 

 

[코드예제]

df.dtypes

[결과] 

name     object
email    object
id        int32
dtype: object

 

 

  • 행열(row, column)을 동시에 선택하겠습니다. 
  • 리스트를 통해 만들 수 있습니다. 

 

1번째와 3번째 행의 email, id  컬럼을 선택하겠습니다.

[코드예제]

df.loc[[0, 2], ["email", "id"]]

[결과] 

 

 

기존에는 알파벳 순서로 자동 입력되던 컬럼의 순서를 바꿀 수 있습니다. 

df[[ , , ]] 리스트로 정렬되기 원하는 순서대로 column을 입력합니다. 

 

[코드예제]

df[["id", "name", "email"]]

[결과] 

 

head는 앞부분을, tail은 맨 뒷부분의 데이터를 조회할 수 있습니다. 

[코드예제]

df.head(2)

[결과] 

 

[코드예제]

df.tail(2)

[결과] 

 

3. apply 함수

  • 순서가 있는 데이터 집합에서 모든 값에 함수를 적용시키는 map 함수와 비슷합니다 

email 컬럼에서 메일의 도메인만 가져와서 새로운 domain 컬럼을 생성해보겠습니다. 

[코드예제]

df

[결과] 

 

 

[코드예제]

def domain(email):
    return email.split("@")[1].split(".")[0]

domain(df.loc[0]["email"])

[결과] 

'gmail'

 

 

[코드예제]

df["domain"] = df["email"].apply(domain)
df

[결과]

 

[코드예제]

df["domain"] = df["email"].apply(lambda email: email.split("@")[1].split(".")[0])
df

[결과] 

 

 

반응형
반응형

NumPy 기초 3 - 행렬 데이터의 결합, concatenate 함수

  • concatenate 

먼저 결합에 필요한 배열을 만들겠습니다. 

2행 3열인 정수 랜덤 데이터 = na1

3행 2열인 정수 랜덤 데이터 = na2

3행 3열인 정수 랜덤 데이터 = na3


[코드예제]

na1 = np.random.randint(10, size=(2, 3))
na2 = np.random.randint(10, size=(3, 2))
na3 = np.random.randint(10, size=(3, 3))

각각의 데이터를 확인해보겠습니다. 

 

[코드예제]

na1

[결과] 

array([[3, 0, 0],
       [5, 7, 5]])

 

[코드예제]

na2

[결과] 

array([[0, 8],
       [6, 5],
       [1, 7]])

 

[코드예제]

na3

[결과] 

array([[4, 3, 6],
       [1, 4, 0],
       [8, 5, 4]])


1_ 세로로 결합하기

: concatenate는 기본 세로로(위 아래로) 결합 됩니다. 

: 작성법

np.concatenate((a행렬, b행렬))

 

[코드예제]

# 세로 결합
np.concatenate((na1, na3))

[결과] 

array([[3, 0, 0],
       [5, 7, 5],
       [4, 3, 6],
       [1, 4, 0],
       [8, 5, 4]])

 

2_ 가로로 결합하기 

: 기본 작성법에서 axis = 1로 변경하면 옆으로(가로로) r결합되는 것을 확인할 수 있습니다. 

 

[코드예제]

# 가로 결합
np.concatenate((na2, na3), axis=1)

 

[결과] 

array([[0, 8, 4, 3, 6],
       [6, 5, 1, 4, 0],
       [1, 7, 8, 5, 4]])

 

반응형
반응형

Index

1. linspace, logspace 함수

      1_ linspace

      2_ logspace

     

2. NumPy random

      1_ seed : 랜덤의 시작 값을 설정

      2_ rand : 균등분포로 난수를 발생

      3_ randn : 정규분포로 난수를 발생

      4_ randint : 균등분포로 정수값을 발생

      5_ suffle : 행렬 데이터를 섞어 줍니다.

      6_ choice : 특정 확률로 데이터를 선택


1. linspace, logspace 함수

linspace와 logspace 특정 곡선을 그리듯 일정 간격으로 구성된 벡터값을 생성하기 위한 함수입니다.

  • linspace : 설정한 범위에서 선형적으로 분할한 위치의 값을 출력합니다. 
  • logspace : 설정한 범위에서 로그로 분할한 위치의 값을 출력합니다. 

1_ linspace

a와 b사이에 c개의 점을 생성하기 위한 명령어입니다.

만약에 c가 생략될 경우 → linspace(a, b) 100개의 일정한 등간격을 가진 행 벡터가 생성됩니다.

  • 사용 방법 : np.linspace(a, b, c)

[코드예제]

np.linspace(0, 100, 5)

[결과] 

array([  0.,  25.,  50.,  75., 100.])

 

2_ log space

a, b, c 을 log scale 등간격인 행 벡터를 생성하는  명령어입니다.

아례 예제처럼 log^a와 log^b 사이에 등간격인 c개의 행벡터를 생성합니다

 

만약에 c가 생략될 경우 → logspace(a, b) 50개의 일정한 등간격을 가진 행 벡터가 생성됩니다.

  • 사용 방법 : np.logspace(a, b, c)

[코드예제]

# log10(x1)=2, log10(x2)=3, log10(x3)=4 만들기
np.logspace(2, 4, 3)

[결과] 

array([  100.,  1000., 10000.])

 

 

2. NumPy random

데이터를 생성할 때 랜덤하게 섞거나 임의의 수를 발생시키는 NumPy의 random 서브 패키지로 제공됩니다.

서브 패키지이기 때문에 앞에 항상 np.random.을 써주어야 합니다.  

 

1_ 시드값

  • seed : 랜덤의 시작 값을 설정

2_ 난수 생성

  • rand : 균등분포로 난수를 발생(0부터 1사이) 
  • randn : 정규분포로 난수를 발생 (가우시안의 표준 정규 분포)
  • randint : 균등분포로 정수값을 발생 (균일 분포의 정수 난수)

3_ 데이터 순서바꾸기

  • suffle : 행렬 데이터를 섞어 줍니다.

4_ 데이터 샘플링

  • choice : 특정 확률로 데이터를 선택


1_ 시드 값 생성 : seed 

: 처음 넘파이를 접하시는 분들은 seed 개념이 어려울 수 있는데 컴퓨터 프로그램에서 무작위 수는 "정말" 무작위가 아니라, 어떤 특정 시작 수를 정해주면 정해진 알고리즘에 따라 난수처럼 보이는 무작위 수열을 만들어줍니다.

이때 시작 수 "seed"라고 합니다.

특정한 시드값이 사용되면 다음에 만들어지는 난수들은 사실 모두 예측할 수는 있습니다. 

 

[코드예제]

# seed는 객체를 바꾸어주는 함수이기 때문에 1 동일한 숫자를 넣었을 경우
# randint로 출력되는 값이 같다는 걸 알 수 있다.

np.random.seed(1)
result1 = np.random.randint(10, 100, 10)

np.random.seed(1)
result2 = np.random.randint(10, 100, 10)

np.random.seed(2)
result3 = np.random.randint(10, 100, 10)

result1, result2, result3

[결과] 

(array([47, 22, 82, 19, 85, 15, 89, 74, 26, 11]),
 array([47, 22, 82, 19, 85, 15, 89, 74, 26, 11]),
 array([50, 25, 82, 32, 53, 92, 85, 17, 44, 59]))

 

2_ 난수 생성 rand, randn, randint

random의 서브 패키지 중에서 난수를 생성하는 3총사 입니다. 

  • rand : 균등분포로 난수를 발생(0부터 1사이) 
  • randn : 정규분포로 난수를 발생 (가우시안의 표준 정규 분포)
  • randint : 균등분포로 정수값을 발생 (균등 분포의 정수 난수)

균등분포와 정규 분포가 헤깔리시는 분들을 위해 아래 그림으로 설명합니다

  • rand

: 0에서 1사이 균일한 확률 분포로 실수와 난수를 만들어주는 서브 패키지 입니다. 

괄호 안에 들어가는 숫자(인수)는 난수의 크기(n개)로 보시면 됩니다.  

 

[코드예제]

np.random.rand(10)

 

array([0.20464863, 0.61927097, 0.29965467, 0.26682728, 0.62113383,
       0.52914209, 0.13457995, 0.51357812, 0.18443987, 0.78533515])

 

 

 

  • randn

: 표준편자가 1인 가우시안의 표준 정교 분포를 따른 난수 생성 패키지입니다. 

 

[코드예제]

np.random.randn(10)

 

array([-0.0191305 ,  1.17500122, -0.74787095,  0.00902525, -0.87810789,
       -0.15643417,  0.25657045, -0.98877905, -0.33882197, -0.23618403])

 

  • randint

: a에서 시작하여 b-1까지 난수를 발생시키며, 괄호 안은 행렬의 size를 말합니다. 

사용법은 

np.random.randint(a, b, (행, 열))

 

[코드예제]

r = np.random.randint(1, 10, (3, 4))
r

 

array([[2, 8, 9, 3],
       [9, 8, 2, 7],
       [9, 6, 4, 1]])

 


3_ 데이터 순서바꾸기

  • suffle : 행렬 데이터를 섞어 줍니다.

[코드예제]

np.random.shuffle(r)
r

[결과] 

array([[9, 6, 4, 1],
       [9, 8, 2, 7],
       [2, 8, 9, 3]])


4_ 데이터 샘플링 (data sampling)

  • choice : 특정 확률로 데이터를 선택합니다.  
  • 사용법
    : np.numpy.choice(a, size=None, replace=True, p=none) 
    - a : 배열이면 이미 있는 데이터로, 정수라면 arange(a) 함수 명령을 통해 데이터를 만듭니다. 
    - size : 샘플을 원하는 갯수
    - replace : boolean 으로 true일 경우 선택되었더라 하더라도 데이터를 다시 선택할 수 있습니다.
    - p : 각 데이터가 선택 될 수 있는 확률입니다 ( 주사위가 각 면이 나올 확률이 1/6인 것 처럼) 

[코드예제]

 

 

np.random.choice(5, 10, p=[0.1, 0, 0.4, 0.2, 0.3])

[결과] 

array([4, 3, 2, 4, 2, 4, 4, 3, 4, 4])

 

1. linspace, logspace 함수

      1_ linspace

      2_ logspace

     

2. NumPy random

      1_ seed : 랜덤의 시작 값을 설정

      2_ rand : 균등분포로 난수를 발생 

      3_ randn : 정규분포로 난수를 발생

      4_ randint : 균등분포로 정수값을 발생

      5_ suffle : 행렬 데이터를 섞어 줍니다.

      6_ choice : 특정 확률로 데이터를 선택

 

반응형
반응형

NumPy 기초  - numpy란, 행렬, 데이터선택, 브로드캐스팅(broad casting), 마스킹(masking)

1. NumPy 알아보기 

      1_ Numpy란? 

      2_ Numpy 사용하기(import) 

     

2. NumPy 배열

      1_ list 데이터로 행렬 데이터를 생성하기

      2_ 행렬의 모양 변경하기 

      3_ 행렬 데이터의 선택 : offset index

      4_ 데이터 수정하기 

      5_ 브로드캐스팅 (broad casting)  &  마스킹(masking)

      6_ 행렬 데이터의 생성 _ zeros / ones 


1.NumPy 알아보기 

1_ Numpy란?

Numpy(넘파이)는 행렬 연산에 있어서 다양한 편의를 제공하는 모듈입니다.

단위는 array로 데이터가 저장됩니다. 

 

특징은 

  • 내부가 속도가 빠른 C로 작성되어있어 연산 속도가 매우 빠릅니다
  • 특히 선형대수학을 빠르게 연산할 수 있습니다 

 

2_ Numpy 사용하기(import) 

import numpy as np

 

2. NumPy 배열

1_ list 데이터로 행렬 데이터를 생성하기 

 

np.array() 괄호안에 list 데이터를 넣어 배열을 형성할 수 있습니다. 

type()을 넣어 데이터 타입을 확인하면, numpy.ndarray 라는 형식으로 데이터 타입이 출력됩니다. 

 

[예제코드] 

arrary = np.array([1, 2, 3])
type(arrary), arrary

[결과]

(numpy.ndarray, array([1, 2, 3]))

 

list 를 두번 중첩하여 사용함으로 2차원 배열을 만들 수 있습니다. 

 

[예제코드] 

arrary2 = np.array(
    [[1, 2, 3],
    [4, 5, 6]],
)
arrary2, arrary2.ndim, arrary2.shape

[결과]

(array([[1, 2, 3],
        [4, 5, 6]]), 2, (2, 3))

 

 

2_ 행렬의 모양 변경하기 

reshape()를 통해 객체(행렬)의 모양을 변경할 수 있습니다.

실제로 데이터를 변경하는 것은 아니고, 배열 객체의 shape 정보만을 수정합니다.  

 

[예제코드] 

arrary2.reshape(3, 2)

[결과]

array([[1, 2],
       [3, 4],
       [5, 6]])

 

3_ 행렬 데이터의 선택 : offset index (오프셋 인덱스)

array 배열 역시 index를 가지고 있어 데이터를 선택할 때 마스킹을 사용합니다

2차원 array 인덱스는

  • [ , ] 콤마를 기준으로 2개의 인자를 입력한다. (앞은 행, 뒤는 열)
  • [ ] [ ]  대괄호를 두개 써서 2개의 인자를 별도로 입력할 수 있습니다.  (앞은 행, 뒤는 열)


  • [행, 열] 로 데이터 선택하기 

[예제코드] 

arrary2[1, 2] # arrary2[1][2]

[결과]

6

 

 

 

  • [행] [열] 로 데이터 선택하기 

[예제코드] 

arrary2[1][::-1] #두번째 행을 선택하고, 처음부터 끝까지 가져오되, 역순으로 가져오기

[결과]

array([6, 5, 4])

 

 

4_ 데이터 수정하기 

이제 데이터를 선택했으니 list 처럼 수정해보겠습니다. 

 

[예제코드] 

#2번째 행에서 3번째 데이터를 선택하여 10으로 바꾸어주기
arrary2[1][2] = 10  
arrary2

[결과]

array([[ 1,  2,  3],
       [ 4,  5, 10]])

 

 

5_ 브로드캐스팅 (broad casting)  &  마스킹(masking)

 하나의 배열or 요소가 어떤 특정 배열에 영향을 미칠때 배열간의 형상을 맞추는 것을 브로드 캐스팅이라고 합니다 

 

[예제코드] 

# 첫번째 행의 전부를 0으로 데이터 바꾸기 
arrary2[0] = 0
arrary2

[결과]

array([[ 0,  0,  0],
       [ 4,  5, 10]])

 

[예제코드] 

# 첫번째 행을 7, 8, 9로 데이터 바꾸기 
arrary2[0] = [7, 8, 9]
arrary2

[결과]

array([[ 7,  8,  9],
       [ 4,  5, 10]])

 

** 브로드캐스팅에서 비교연산자를 사용하면 연산이 된 후 true / false 로 리턴됩니다

이후 masking할때 자주 사용됩니다. 

[예제코드] 

# array2 배열에서 7이상의 요소들만 true 로 반환
#idx변수를 만들어 (= masking을 만듬) true/false로 변환된 데이터를 저장) 
idx = arrary2 > 7
idx

[결과]

array([[False,  True,  True],
       [False, False,  True]])

 

[예제코드] 

#offset index 값으로 key를 찾는 것 처럼
#만들어진 idx 마스킹을 사용하여 true에 해당하는 값들만 출력할 수 있습니다. 
arrary2[idx]

[결과]

array([ 8,  9, 10])

 

 

[예제코드] 

# true에 해당하는 값들을 100을 넣어 주어 요소를 바꿉니다

arrary2[idx] = 100
arrary2

[결과]

array([[  7, 100, 100],
       [  4,   5, 100]])

 

 

6_ 행렬 데이터의 생성 _ zeros / ones 

Numpy는 원하는 shape으로 배열을 설정하고, 각 요소를 특정 값으로 초기화하는

zeros, ones 와 같은 다양한 함수를 제공합니다.

또한, 파라미터로 입력한 배열과 같은 shape의 배열을 만드는 zeros_like, ones_like, full_like 함수도 제공합니다.

이 함수를 이용하여 배열 생성하고 초기화할 수 있습니다.

 

 

1) np.zeros 함수

  • zeros(shape, dtype=float, order='C')

  • 지정된 shape의 배열을 생성하고, 모든 요소를 0으로 데이터를 만듭니다.

[예제코드] 

#2행 3열을 숫자 0으로 채워 배열 만들기 

data = np.zeros((2, 3))
data

[결과]

array([[0., 0., 0.],
       [0., 0., 0.]])

 

[예제코드] 

# 처음 제로스를 사용하면 데이터 타입이 실수로 나옵니다
data.dtype

[결과]

dtype('float64')

 

[예제코드] 

# 조금 더 깔끔하게 보여주기 위해 정수로 데이터 타입을 바꾸겠습니다

data2 = data.astype("int")
data2.dtype

[결과]

dtype('float64')

 

 

2) np.ones 함수

  • np.ones(shape, dtype=None, order='C')
  • 지정된 shape의 배열을 생성하고, 모든 요소를 1로 넣어줍니다. 

[예제코드] 

data = np.ones((2,3,3))
data

[결과]

array([[[1., 1.],
        [1., 1.],
        [1., 1.]],

       [[1., 1.],
        [1., 1.],
        [1., 1.]]])

 

 

 

3) np.arange 함수

  • numpy.arange([start,] stop[, step,], dtype=None)
  • 시작점(start)부터 마지막(stop) 미만까지 간격(step)으로 데이터 생성한 후 배열을 만들어줍니다 
  • 범위내에서 간격을 기준 균등 간격의 배열
  • 요소의 객수가 아닌 데이터의 간격을 기준으로 배열 생성

[예제코드] 

#한개의  숫자(n) 만 입력하면, 자동으로 0부터 n-1까지 숫자가 출력됩니다

np.arange(5)

[결과]

array([0, 1, 2, 3, 4])

 

[예제코드] 

# 5부터 9까지 숫자를 출력
np.arange(5, 10)

[결과]

array([5, 6, 7, 8, 9])

 

[예제코드] 

#5부터 9까지 2step을 뛰어서 
np.arange(5, 10, 2)

[결과]

array([5, 7, 9])

반응형
반응형

주피터노트북 번거로움을 덜어주는 autopep8 설치

 

"1+2" 와 "1 + 2"의 차이 느껴지시나요?

jupyter notebook 에서 연산자 앞뒤로 space를 넣어주어야 하는데

번거로워서 이런거 자동으로 수정해주면 좋겠다..

싶으실 때가 많으실 것 같습니다. 

 

이런 부분을 해결해주는 기능이 autopep8 입니다

 

 

1. 터미널에서 아래 코드를 입력해 nbextentions config를 설치합니다

$ conda install -c conda-forge jupyter_contrib_nbextensions

 

2. 이렇게 설치하면 jupyter notebook메뉴에서 edit 를 누루면 하단에

"nbextensitons config"가 나오는 것을 확인 할 수 있습니다. 

 

 

 

3 .ctrl +c 눌러서 주피터 노트북 서버를 종료하고 다시 재시작합니다.

 

4 .autopep8 패키지 설치를 위해 아래의 명령중 한가지만 선택해서 설치해주시면 됩니다. 

# 선택 1)
$ pip install autopep8

# 선택 2)
$ conda install -c conda-forge autopep8

 

5. Edit - nbextentions config 메뉴로 들어가서 autopep8 체크해 줍니다. 

 

 

6. 체크를 해주고 다시 노트북을 켜면 아래처럼 망치 아이콘을 확인 할 수 있습니다.

 

7. 아래 단축키를 사용해서 수정할 수 있습니다. 

  • 단일 셀을 고칠 때 :  ctrl + l 
  • 모든 셀을 고칠 때 :  ctrl + shift + l

 

반응형
반응형

오늘은 매직 커맨드 설정 없이 바로 그래프를 그릴 수 있도록 설정하는

inline backend config 설정하겠습니다. 

 

1. 터미널에서 아래 코드를 작성합니다. 

$ vi ~/.ipython/profile_default/ipython_kernel_config.py

 

2. 아래처럼 긴 글이 나오는데 끝까지 아래로 스크롤을 내립니다.

(#tip. 명령모드에서 대문자 G (shift +g)를 누르면 마지막줄로 이동합니다)

 

3. 아래 문자열을 복사해서 넣어주면 됩니다. 

c.IPKernelApp.matplotlib = 'inline'
c.InlineBackend.figure_format = 'retina'

이로써 명령문을 넣지 않더라도 바로 그래프를 그릴 수 있습니다. 

반응형
반응형

[Jupyter Notebook]번거로움을 줄여주는 startup file 만들기 

Jupyter Notebook에서 자주 사용하는 패키지들이 많은데

"import  as .."를 일일이 한줄씩 써야할 때 마다 귀찮음이 찾아옵니다. 

(numpy, pandas, requests, beautifulsoup, matplotlib 등등..) 

 

이러한 번거러움 을 없애기 위해서 Jupyter Notebook에서 사용 할때마다

자주 사용하는 패키지가 미리 실행되도록 설정해서 항상 패키지를 호출 해야하는 번거로움을 없앨수 있습니다.

 

 


"start up 파일 설정 방법"


 

1. 터미널 에서 아래 코드를 치면 ipython 디렉토리에 프로필 파일 생성합니다. 

$ ipython profile create

 

2. ipython 디렉토리로 이동한 다음 

$ cd ~/.ipython/profile_default/startup

 

3. ls를 입력하여 폴더의 파일리스트를 확인하면 README 파일을 확인 할 수 있다.

$ ls

 

4. cat README 를 입력하여 README 내용을 확인합니다.

cat README

여기서 .py 들 앞에 숫자들을 확인할 수 있는데 

주피터 노트북을 실행할 때 순차적으로 실행되는 것을 알 수 있습니다.

 

 

5. 아래와 같이 입력해 00-first.py 파일을 형성하겠습니다.

$ vi 00-first.py

 

6. 아래와 같이 필요한 패키지를 모두 입력하고 :wq 를 입력하면 완성됩니다. 

# basic
import time
import random

# data analytics
import numpy as np
import pandas as pd

# web crawling
import requests
from bs4 import BeautifulSoup

# visulazation
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

7. jupyter notebook을 실행해서 np를 입력하면 (numpy) 아래처럼 모듈이 활성화 되어있습니다.  

 

반응형
반응형

 


Index

1. 컬렉션 데이터 타입이란? 

2. 튜플(tuple) 

3. 딕셔너리(dictionary)


python 강의 기초 문법 노트 #3 - 컬렉션 데이터 타입 튜플, 딕셔너리

 

1. 컬렉션 데이터 타입 

지난 시간 배웠던 리스트(list)에 이어서 다른 컬렉션 데이터 타입 튜플과 딕셔너리

 

컬렉션 데이터 타입 3가지  : list, tuple, dict

  • list [] : 순서가 있는 수정이 가능한 데이터 타입
  • tuple () : 순서가 있는 수정이 불가능한 데이터 타입
  • dict {} : 순서가 없고 키:값 으로 구성되어 있는 데이터 타입

2. 튜플(tuple)

튜플(tuple)은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같다.

 

 

리스트

튜플

괄호

[ and ]

( and )

수정

생성, 삭제, 수정 가능

 

괄호 생략 불가능

수정 불가

괄호 생략 가능

 

결론) 만약 값이 변경이 되면 안될때는 튜플을 쓰고 변화가 필요하면 리스트를 사용한다

 

 

[코드예제]

tuple1 = () # 변수에 튜플을 담음
tuple2 = (1,) # 값이 하나일때는 반드시 뒤에 콤마(,)를 붙여야 합니다. 
tuple3 = (1, 2, 3) # 가장 기본적인 초기화 및 값 생성 방법
tuple4 = 1, 2, 3 # 괄호 생략 가능
tuple5 = ('a', 'b', ('ab', 'cd')) # 튜플안에 튜플이 들어갈 수 있습니다. 

print "---- Result ----"
print tuple1
print tuple2
print tuple3
print tuple4
print tuple5

 

[결과]

---- Result ----
()
(1,)
(1, 2, 3)
(1, 2, 3)
('a', 'b', ('ab', 'cd'))

 

리스트와 동일하게 튜플에서도 슬라이싱, +, * 연산은 동일하게 기능합니다

 

[코드예제]

tuple1 = (1, 2, 3, 4, 5)
tuple2 = (11, 22, 33)

print "---- Result ----"
print tuple1[0]
print tuple1[1:3]
print tuple1 + tuple2
print tuple2 * 3

 

[결과]

---- Result ----
1
(2, 3)
(1, 2, 3, 4, 5, 11, 22, 33, 11, 22, 33)
(11, 22, 33, 11, 22, 33, 11, 22, 33)

 

튜플의 가장 큰 특징은 리스트 보다 같은 데이터를 가졌을 때 공간을 적게 사용합니다.

 

[코드예제]

tp1 = 1, 2, 3
tp2 = (4, 5, 6)
type(tp1), type(tp2), tp1, tp2

[결과]

(tuple, tuple, (1, 2, 3), (4, 5, 6))

 

 

[코드예제]

a, b = 1, 2
a, b

[결과]

(1, 2)

 

 

[코드예제]

# offset index 사용
tp1[1], tp1[::-1]

[결과]

(2, (3, 2, 1))

 

# 리스트와 튜플의 저장공간 차이 비교

[코드예제]

import sys

ls = [1, 2, 3]  #리스트
tp = (1, 2, 3)  #튜플

#.getsizeof()변수에 담긴 데이터용량 확인할때 쓰는 함수
print(sys.getsizeof(ls), sys.getsizeof(tp))

[결과]

88 72

 

 

3. 딕셔너리(dictionary)

순서가 없고, Key와 Value가 중괄호{ }로 둘러싸여있는 모습

{Key1:Value1, Key2:Value2, Key3:Value3 ...}

요소는 Key : Value 형태로 이루어저  쉼표(,) 로 구분되어 있다.

 

※key 는 정수, 문자열 데이터 타입만 사용 가능

 

[코드예제]

dic = {
	1: "one",
    "two":2,
    "three": [1,2,3],
    }
    
print(type(dic),dic)

[결과]

(dict, {1:'one', 'two':2, 'three':[1, 2, 3]})

 

 

딕셔너리 호출 방법 살펴보기


[코드예제]

joylee = {'name':'joy', 'phone':'01011111111', 'birth': '1205'}
print "\n---- Result ----\n"
print joylee
print joylee['name']
print joylee['phone']
print joylee['birth']

[결과]

---- Result ----
{'phone': '01011111111', 'name': 'joy', 'birth': '1205'}
joy
1011111111
1205

 

[코드예제]

print "\n---- Result2 ----\n"

# 추가하기
joylee['age'] = 20
print joylee

# 같은 key에 추가하기
joylee['age'] = 25
print joylee

# 삭제하기
del joylee['phone']
print joylee

# Key만 출력하기
print joylee.keys()

# 값만 출력하기
print joylee.values()

 

[결과]

Index

1. 컬렉션 데이터 타입이란? 

2. 튜플(tuple) 

3. 딕셔너리(dictionary)


 

python 강의 기초 문법 노트 #3 - 컬렉션 데이터 타입 튜플, 딕셔너리

 

1. 컬렉션 데이터 타입 

지난 시간 배웠던 리스트(list)에 이어서 다른 컬렉션 데이터 타입 튜플과 딕셔너리

 

컬렉션 데이터 타입 3가지  : list, tuple, dict

  • list [] : 순서가 있는 수정이 가능한 데이터 타입
  • tuple () : 순서가 있는 수정이 불가능한 데이터 타입
  • dict {} : 순서가 없고 키:값 으로 구성되어 있는 데이터 타입

2. 튜플(tuple)

튜플(tuple)은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같다.

 

 

리스트

튜플

괄호

[ and ]

( and )

수정

생성, 삭제, 수정 가능

 

괄호 생략 불가능

수정 불가

괄호 생략 가능

 

결론) 만약 값이 변경이 되면 안될때는 튜플을 쓰고 변화가 필요하면 리스트를 사용한다

 

 

[코드예제]

tuple1 = () # 변수에 튜플을 담음
tuple2 = (1,) # 값이 하나일때는 반드시 뒤에 콤마(,)를 붙여야 합니다. 
tuple3 = (1, 2, 3) # 가장 기본적인 초기화 및 값 생성 방법
tuple4 = 1, 2, 3 # 괄호 생략 가능
tuple5 = ('a', 'b', ('ab', 'cd')) # 튜플안에 튜플이 들어갈 수 있습니다. 

print "---- Result ----"
print tuple1
print tuple2
print tuple3
print tuple4
print tuple5

 

[결과]

---- Result ----
()
(1,)
(1, 2, 3)
(1, 2, 3)
('a', 'b', ('ab', 'cd'))

 

리스트와 동일하게 튜플에서도 슬라이싱, +, * 연산은 동일하게 기능합니다

 

[코드예제]

tuple1 = (1, 2, 3, 4, 5)
tuple2 = (11, 22, 33)

print "---- Result ----"
print tuple1[0]
print tuple1[1:3]
print tuple1 + tuple2
print tuple2 * 3

 

[결과]

---- Result ----
1
(2, 3)
(1, 2, 3, 4, 5, 11, 22, 33, 11, 22, 33)
(11, 22, 33, 11, 22, 33, 11, 22, 33)

 

튜플의 가장 큰 특징은 리스트 보다 같은 데이터를 가졌을 때 공간을 적게 사용합니다.

 

[코드예제]

tp1 = 1, 2, 3
tp2 = (4, 5, 6)
type(tp1), type(tp2), tp1, tp2

[결과]

(tuple, tuple, (1, 2, 3), (4, 5, 6))

 

 

[코드예제]

a, b = 1, 2
a, b

[결과]

(1, 2)

 

 

[코드예제]

# offset index 사용
tp1[1], tp1[::-1]

[결과]

(2, (3, 2, 1))

 

# 리스트와 튜플의 저장공간 차이 비교

[코드예제]

import sys

ls = [1, 2, 3]  #리스트
tp = (1, 2, 3)  #튜플

#.getsizeof()변수에 담긴 데이터용량 확인할때 쓰는 함수
print(sys.getsizeof(ls), sys.getsizeof(tp))

[결과]

88 72

 

 

3. 딕셔너리(dictionary)

순서가 없고, Key와 Value가 중괄호{ }로 둘러싸여있는 모습

{Key1:Value1, Key2:Value2, Key3:Value3 ...}

요소는 Key : Value 형태로 이루어저  쉼표(,) 로 구분되어 있다.

 

※key 는 정수, 문자열 데이터 타입만 사용 가능

 

[코드예제]

dic = {
	1: "one",
    "two":2,
    "three": [1,2,3],
    }
    
print(type(dic),dic)

[결과]

(dict, {1:'one', 'two':2, 'three':[1, 2, 3]})

 

 

딕셔너리 호출 방법 살펴보기


[코드예제]

joylee = {'name':'joy', 'phone':'01011111111', 'birth': '1205'}
print "\n---- Result ----\n"
print joylee
print joylee['name']
print joylee['phone']
print joylee['birth']

[결과]

---- Result ----
{'phone': '01011111111', 'name': 'joy', 'birth': '1205'}
joy
1011111111
1205

 

[코드예제]

print "\n---- Result2 ----\n"

# 추가하기
joylee['age'] = 20
print joylee

# 같은 key에 추가하기
joylee['age'] = 25
print joylee

# 삭제하기
del joylee['phone']
print joylee

# Key만 출력하기
print joylee.keys()

# 값만 출력하기
print joylee.values()

[결과]

---- Result2 ----

{'phone': '01011111111', 'age': 20, 'name': 'joy', 'birth': '1205'}
{'phone': '01011111111', 'age': 25, 'name': 'joy', 'birth': '1205'}
{'age': 25, 'name': 'joy', 'birth': '1205'}
['age', 'name', 'birth']
[25, 'joy', '1205']

 

 

 

반응형
반응형

Index

1. 컬렉션 데이터 타입이란? 

2. 튜플(tuple) 

3. 딕셔너리(dictionary)


python 강의 기초 문법 노트 #3 - 컬렉션 데이터 타입 튜플, 딕셔너리

 

1. 컬렉션 데이터 타입 

지난 시간 배웠던 리스트(list)에 이어서 다른 컬렉션 데이터 타입 튜플과 딕셔너리

 

컬렉션 데이터 타입 3가지  : list, tuple, dict

  • list [] : 순서가 있는 수정이 가능한 데이터 타입
  • tuple () : 순서가 있는 수정이 불가능한 데이터 타입
  • dict {} : 순서가 없고 키:값 으로 구성되어 있는 데이터 타입

2. 튜플(tuple)

튜플(tuple)은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같다.

 

 

리스트

튜플

괄호

[ and ]

( and )

수정

생성, 삭제, 수정 가능

 

괄호 생략 불가능

수정 불가

괄호 생략 가능

 

결론) 만약 값이 변경이 되면 안될때는 튜플을 쓰고 변화가 필요하면 리스트를 사용한다

 

 

[코드예제]

tuple1 = () # 변수에 튜플을 담음
tuple2 = (1,) # 값이 하나일때는 반드시 뒤에 콤마(,)를 붙여야 합니다. 
tuple3 = (1, 2, 3) # 가장 기본적인 초기화 및 값 생성 방법
tuple4 = 1, 2, 3 # 괄호 생략 가능
tuple5 = ('a', 'b', ('ab', 'cd')) # 튜플안에 튜플이 들어갈 수 있습니다. 

print "---- Result ----"
print tuple1
print tuple2
print tuple3
print tuple4
print tuple5

 

[결과]

---- Result ----
()
(1,)
(1, 2, 3)
(1, 2, 3)
('a', 'b', ('ab', 'cd'))

 

리스트와 동일하게 튜플에서도 슬라이싱, +, * 연산은 동일하게 기능합니다

 

[코드예제]

tuple1 = (1, 2, 3, 4, 5)
tuple2 = (11, 22, 33)

print "---- Result ----"
print tuple1[0]
print tuple1[1:3]
print tuple1 + tuple2
print tuple2 * 3

 

[결과]

---- Result ----
1
(2, 3)
(1, 2, 3, 4, 5, 11, 22, 33, 11, 22, 33)
(11, 22, 33, 11, 22, 33, 11, 22, 33)

 

튜플의 가장 큰 특징은 리스트 보다 같은 데이터를 가졌을 때 공간을 적게 사용합니다.

 

[코드예제]

tp1 = 1, 2, 3
tp2 = (4, 5, 6)
type(tp1), type(tp2), tp1, tp2

[결과]

(tuple, tuple, (1, 2, 3), (4, 5, 6))

 

 

[코드예제]

a, b = 1, 2
a, b

[결과]

(1, 2)

 

 

[코드예제]

# offset index 사용
tp1[1], tp1[::-1]

[결과]

(2, (3, 2, 1))

 

# 리스트와 튜플의 저장공간 차이 비교

[코드예제]

import sys

ls = [1, 2, 3]  #리스트
tp = (1, 2, 3)  #튜플

#.getsizeof()변수에 담긴 데이터용량 확인할때 쓰는 함수
print(sys.getsizeof(ls), sys.getsizeof(tp))

[결과]

88 72

 

 

3. 딕셔너리(dictionary)

순서가 없고, Key와 Value가 중괄호{ }로 둘러싸여있는 모습

{Key1:Value1, Key2:Value2, Key3:Value3 ...}

요소는 Key : Value 형태로 이루어저  쉼표(,) 로 구분되어 있다.

 

※key 는 정수, 문자열 데이터 타입만 사용 가능

 

[코드예제]

dic = {
	1: "one",
    "two":2,
    "three": [1,2,3],
    }
    
print(type(dic),dic)

[결과]

(dict, {1:'one', 'two':2, 'three':[1, 2, 3]})

 

 

딕셔너리 호출 방법 살펴보기


[코드예제]

joylee = {'name':'joy', 'phone':'01011111111', 'birth': '1205'}
print "\n---- Result ----\n"
print joylee
print joylee['name']
print joylee['phone']
print joylee['birth']

[결과]

---- Result ----
{'phone': '01011111111', 'name': 'joy', 'birth': '1205'}
joy
1011111111
1205

 

[코드예제]

print "\n---- Result2 ----\n"

# 추가하기
joylee['age'] = 20
print joylee

# 같은 key에 추가하기
joylee['age'] = 25
print joylee

# 삭제하기
del joylee['phone']
print joylee

# Key만 출력하기
print joylee.keys()

# 값만 출력하기
print joylee.values()

[결과]

---- Result2 ----

{'phone': '01011111111', 'age': 20, 'name': 'joy', 'birth': '1205'}
{'phone': '01011111111', 'age': 25, 'name': 'joy', 'birth': '1205'}
{'age': 25, 'name': 'joy', 'birth': '1205'}
['age', 'name', 'birth']
[25, 'joy', '1205']

 

 

 

반응형
반응형

Index

1. 주석(comment)과 출력(print)

      1_ 주석 (#, comment) 

      2_ 출력 ( print())

     

2. 변수 선언

      : 데이터를 저장하는 방법 변수선언 

         * 함수 설명을 보는 방법

     

3. 식별자

      1_식별자 규칙

      2_ snake case

      3_ camel case

 

4. 데이터 타입(자료형, datatype) 

      1_ 기본 데이터 타입 : 문자열(str)

      2_ 기본 데이터 타입 : 숫자 - 정수 (int) 실수 (float)

      3_ 컬렉션 데이터 타입 : 리스트 (list)

 


python 강의 기초 문법 노트 #1 

-  주석과 출력, 변수선언,  식별자, 자료형

1. 주석(comment)과 출력(print)

1_ 주석(comment)

: 앞에 #을 붙이면 코드로 실행이 안됩니다.
코드에 대한 설명이나 중간에 코드를 실행시키고 싶지 않을때 사용
단축키 : ctrl(cmd) + /
블럭설정 : shift + 방향키

 

[코드예제]

# 1,2,3을 출력하는 코드
print(1)
# print(2)
print(3)

[결과] 

1
3

 

2_ 출력(print)

: print 함수
: 코드 중간에 변수에 들어있는 값을 확인하고 싶을때 사용

 

[코드예제]

a = 3
b = 5
print(b)
c = 2
b = 4
print(b)

[결과] 

5
4

 

 


2. 변수 선언

  • RAM 저장공간에 값을 할당하는 행위

print 함수의 옵션

- sep : 자료간의 구분자를 넣어줄 수 있습니다 

- end : 자료 출력이 끝난 후, 구분자를 넣어 줄 수 있습니다

 
# docstring : 함수에 대한 설명 : 단축키(shift + tab)
# 자동완성 : tab

 

[코드예제]

print(1, 2, sep="-", end="\t")
print(3)

[결과] 

1-2	3

 

[코드예제]

python_data_science = 1
python_data_science

[결과] 

1

 

 

 

 

3. 식별자

  • 변수, 함수, 클래스, 모듈등의 이름을 식별자 라고 합니다.

1_ 식별자 규칙

  • 소문자, 대문자, 숫자, 언더스코어(_) 를 사용합니다.
  • 가장 앞에 숫자 사용 불가
  • 예약어의 사용 불가 : def, class, try, except ...
  • 컨벤션
    • snake case : joy_collection : 변수, 함수
    • camel case : JoyCollectiom, joyCollection : 클래스

 

 

[코드예제]

# 10a = 5
# def = 1

[결과] 

  File "<ipython-input-16-09f57f03a914>", line 1
    def = 1
        ^
SyntaxError: invalid syntax

 

 

4. 자료형 (데이터 타입, datatype) 

  • RAM 저장공간을 효율적으로 사용하기 위해서 저장공간의 타입을 설정
  • 동적타이핑
    • 변수 선언시 저장되는 값에 따라서 자동으로 데이터 타입이 설정
  • 기본 데이터 타입 : int, float, bool, str
  • 컬렉션 데이터 타입 : list, tuple, dict

여기서는 기본 데이터 타입의 개념을 이해하고 

다음장에서 문자열과, 컬렉션 데이터 타입의 디테일 내용을 정리하겠습니다 

 

 

1_ 기본 데이터 타입 : 문자열(str)

 

문자열을 만들기 위해서는 ' "로 글자를 감싼다.

a = "Hello World"

 

type(변수) 를 입력하면 변수의 데이터 타입(datatype)을 확인할 수 있습니다

 

[코드예제]

a = 1
# int a = 1
b = "python"
type(a), type(b)

[결과] 

(int, str)

 

 

2_ 기본 데이터 타입 : 숫자 - 정수 (int) 실수 (float) 

 

- 정수 : 소수점 X  ex) 7, 10

- 실수 : 소수점 O ex) 10.2, 87.5 등등

 

 

[코드예제]

a = 1
b = 1.2
c = True # False
d = "data"
type(a), type(b), type(c), type(d)

[결과] 

(int, float, bool, str)

[코드예제]

a + b

[결과] 

2.2

[코드예제]

a + d

[결과] 

a + d
a + d
---------------------------------------------------------
TypeError               Traceback (most recent call last)
<ipython-input-30-4fbab87c839c> in <module>
----> 1 a + d

TypeError: unsupported operand type(s) for +: 'int' and 'str'

 

 

데이터 타입에 함수 : 문자열
# upper : 대문자로 변환

# lower : 소문자로 변환

 

[코드예제]

e = d.upper()

[결과] 

('data', 'DATA')

 

 

[코드예제]

f = " Joy Collection "
f.lower()

 

[결과] 

" joy collection "

 

3_ 컬렉션 데이터 타입 : 리스트 (list)

리스트를 만들기 위해서 [ ] 대괄호로 ,콤마로 구분된 데이터들을 감싼다. 

리스트명 = [요소1, 요소2, 요소3, ...]

 

 

[코드예제]

sampleList = [1, 2, 3, 'python', 'java', 'c#']
print sampleList

 

[결과] 

[1, 2, 3, 'python', 'java', 'c#']

 

 

반응형
반응형

Jupyter Notebook

주피터 노트북(Jupyter Notebook)은 파이썬 코드를 작성하고 실행 결과까지 함께 볼 수 있는 개발도구입니다. 아나콘다(Anaconda)를 설치하면 Jupyter Notebook이 함께 설치되어 Jupyter를 사용할 수 있습니다. 물론 Anaconda를 사용하지 않는 경우 pip 을 통해 Jupyter 패키지를 설치할 수도 있지만, 일반적으로 Anaconda를 설치해서 사용하는 것이 에러 방지에 좋습니다. 

오늘은 코드 작성 시간 단축을 위해 주로 사용하는 jupyter notebook 단축키에 대해 알아보겠습니다. 

 

  • mode
    • 명령모드(esc) : 셀을 수정할때 사용
    • 편집모드(enter) : 셀안의 내용을 수정할때 사용
  • style
    • markdown(명령모드 + m) : 셀안에 설명을 작성할때 사용
    • code(명령모드 + y) : 파이썬 코드를 작성할때 사용
  • 단축키
    • 셀 실행 : shift + enter
    • 셀 삭제 : (명령모드) x
    • 되돌리기 : (명령모드) z
    • 셀 생성 : (명령모드) a(위에), b(아래)

[코드예제]

2 + 1

[결과]

 

 

3

Magic Command  : 셀 내부에서 특별하게 동작하는 커멘드

  • % : 한줄의 magic command를 동작
  • %% : 셀단위의 magic command를 동작
  • 주요 magic command
    • pwd : 현재 주피터 노트북 파일의 경로
    • ls : 현재 디렉토리의 파일 리스트
    • whos : 현재 선언된 변수를 출력
    • reset : 현재 선언된 변수를 모두 삭제
  • [pwd] : 현재 주피터 노트북 파일의 경로를 체크할 수 있는 매직 커맨드

 

[코드예제]

%pwd

[결과]

 

'/Users/radajin/Documents/lecture/dss11/01_python'

 

 

  • [whos] : 현재 선언된 변수를 출력해주는 매직 커맨드

[코드예제]

a = 1

[코드예제]

 

 

%whos

[결과]

 

Variable Type Data/Info ------------------------------ a int 1 autopep8 module <module 'autopep8' from '<...>te-packages/autopep8.py'> json module <module 'json' from '/Use<...>hon3.7/json/__init__.py'>

In [0]:

 

 

  • [reset] : 현재 선언된 변수를 모두 삭제하는 커맨드

[코드예제]

%reset

[결과]

 

Once deleted, variables cannot be recovered. Proceed (y/[n])? y

 

[코드예제]

%whos

[결과]

 

Interactive namespace is empty.

 

Shell Command : 주피터 노트북을 실행 쉘 환경의 명령을 사용

  • 명령어 앞에 !를 붙여서 실행
  • 주요 명령어
    • ls, cat, echo ...

[코드예제]

!echo python

[결과]

python

 

[코드예제]

!ls

[결과]

 

01_jupyter_notebook.ipynb

 

반응형

+ Recent posts