반응형

휴리스틱 평가란?

휴리스틱 평가는 서비스 제품이 UX 산업 표준에 부합하는지, 얼마나 유저 친화적인지 평가하는 방법의 일종입니다. 총 10가지 관점에서 User experience 문제를 확인하고, 디자인 원칙에 따라 평가합니다.

여기서 휴리스틱(Heuristics)이란 경험적 지식으로 평가하는 방법론을 말합니다.

가장 널리 쓰이는 방법은 제이콥 닐슨(Jacob Nielsen) 이 만든 것으로, 자세한 내용은 닐슨 노먼 그룹(Nielson Norman Group) 웹사이트에서 알아볼 수 있습니다.

 

닐슨 노먼 그룹의 - 휴리스틱 평가 

https://www.nngroup.com/articles/ten-usability-heuristics/

 

10 Usability Heuristics for User Interface Design

Jakob Nielsen's 10 general principles for interaction design. They are called "heuristics" because they are broad rules of thumb and not specific usability guidelines.

www.nngroup.com

 


이를 평가할 수 있는 엑셀 파일을 함께 첨부합니다.

해당 엑셀 파일은 UX기획의 기술 공식 사이트에서 제공한 영어 버전을 번역하여 공유합니다.

휴리스틱 평가 - 10가지 사용성 평가 보고서 (엑셀 템플릿

 

🔗[엑셀 다운로드] 휴리스틱 평가 10가지 사용성 평가 보고서 

 

 


 

휴리스틱 평가 - 10가지 주요 항목

1. 시스템 상태의 가시성(Visibility of system status)
2. 시스템과 현실 세계의 연결성(Match between system and the real world)

3. 사용자 통제와 자유(User control and freedom)

4. 일관성과 표준(Consistency and standards)

5. 오류방지(Error prevention)

6. 기억보다는 인지(Recognition rather than recall)

7. 사용의 유연성과 효율성(Flexibility and efficiency of use)

8. 심미적이고 최소화한 디자인(Aesthetic and minimalist design)

9. 사용자가 스스로 오류를 인식, 진단, 복구하도록 지원 (Help users recognize, diagnose, and recover from errors)

10. 도움과 문서화 (Help and documentation)

 


사용자 인터페이스(User Interface)를 위한 휴리스틱 평가 

 

# 1. 시스템 상태의 가시성(Visibility of system status)

사용자가 지금 어느 시스템에 있고, 어디로 갈 수 있고, 어디를 지나왔는지 쉽게 이해시켜줄 필요가 있습니다가능한 빨리(이상적으로는 즉시) 사용자에게 피드백을 제공합니다. 사용자가 현재 상태를 알게 되면, 이전 상호 작용의 결과를 학습하고 다음 단계를 결정할 수 있습니다. 예측 가능한 상호 작용은 제품과 브랜드에 대한 신뢰를 만듭니다.

예시  : 당근 마켓 
내가 판매하고 있는 상품의 [판매내역]  "판매 중"인 상품, "거래 완료" 로 중고 상품의 현재 상황을 정리하여 보여준다
[시스템 상태의 가시성]을 잘 보여주는  당근마켓 사례


# 2. 시스템과 현실 세계의 연결성(Match between system and the real world)

: 디자인은 사용자의 언어로 말해야합니다. 타겟 고객이 실제 사용하는 언어, 개념 아이콘을 사용해서 사용자가 인터페이스 작동 방식을 더 쉽게 배우고 기억할 수 있습니다. 이는 직관적인 경험을 구축하는데 도움이 되기 때문입니다.

 

예시 : 슈퍼마켓의 물품 데이터 베이스
알파벳 순서로 물품 진열 VS 실 사용 카테고리별 상품 진열 
어떤 마트를 가도, 알파벳 순서로 물품이 진열 된 곳을 찾기는 힘들 것입니다.

 


# 3. 사용자 통제와 자유(User control and freedom)

사용자가 실수를 할 때에도, 행위를 취소할 수 있는 방법과, 행위로 무슨 일이 일어날지 명확히 알 수 있는 정보를 제공해야 합니다. 사람들이 프로세스에서 뒤로 가거나 작업을 취소할 수 있어야 제품 사용의 자신감이 생겨납니다. 취소버튼과 같은 현재 상호 작용을 종료하는 명료한 방법을 알려줄 필요가 있습니다. 애플리케이션에서 출구가 명확하게 표시되고 발견 가능한지 확인하세요

 

예시 : 슬랙(slack) 
이미 보낸 메시지를 편집, 삭제 할 수 있는 기능
사용자 통제와 자유 - slack


 

# 4. 일관성과 표준(Consistency and standards)

사용자는 우리 제품만 사용하지 않습니다. 대부분의 시간을 타사 제품을 이용합니다. 다른 제품에 대한 사용자의 경험은 자사 제품을 사용자에 대한 경험의 기대치를 설정합니다. 사용자가 어느 페이지를 보든지, 쉽게 이해할 수 있도록 기존의 유저 경험을 파악하고, 제품 안에서도 제목, 콘텐츠 영역은 일관적인 스타일을 유지하여 추가적인 학습이 없어도 경험을 원활히 진행할 수 있도록 사용자를 안내하세요.

예시 : 노션(notion) 
일관적인 포맷으로 메모, 서류를 작성할 수 있도록 도와주는 노션
워드(word) 사용 경험이 있는 사용자라면 누구나 노션을 시작할 수 있을 정도로 직관적이고 심플하다 
일관성과 표준 - 노션 화면

 

 

# 5. 오류방지(Error prevention)

사용자가 오류를 발생시키지 않도록 명확한 안내와 설명을 제공하고, 사용자에게 친숙한 방식으로 메시지를 작성할 필요가 있습니다. 예를 들어 [삭제], [저장]과 같은 버튼은 분리하여야 사용자가 어렵게 작성한 데이터가 손실되지 않습니다. 물론 실수를 저질렀다고 해도 시스템적으로 알려주는 것도 중요합니다.

예시 : Gmail 
수신자를 깜빡하고 "보내기" 버튼만 눌렀을 때, 오류 메시지를 띄워 받는 사람을 지정하라고 안내해준다. 
오류방지 - gmail

 

 

# 6. 기억보다는 인지(Recognition rather than recall)

시스템이 직관적일수록 연상을 통해 기억하기 쉽고, 학습 관련 비용이 절감됩니다. 예를 들어 “리스폰은 포르투갈의 수도입니까?”라는 질문과, “포르투갈의 수도는 무엇입니까?” 비교해보면 당연히 전자에 대답할 가능성이 더 큽니다. 원하는 것이 무엇인지 기억을 이끌어내게 하는 것보다는, 인지적인 노력을 줄여줄 선택지 옵션을 나열해주는 것이 사용자가 참여도가 높을 것입니다

예시 : 네이버 쇼핑 검색 시, 카테고리 노출
원하는 검색어를 입력하면 소비자가 원하는 스타일을 명확히 찾아갈 수 있도록, 카테고리/브랜드/컬러 등 다양한 선택지 옵션을 나열해 준다 
기억보다는 인지 - 네이버 쇼핑 화면

 

 

# 7. 사용의 유연성과 효율성(Flexibility and efficiency of use)

초보자에서부터, 숙련자까지 모두에게 적합한 디자인을 제공하면 어떨까요? 새로운 사용자를 위해 설명이 충분하면서도 직관적인 인터페이스를 제공하면서, 사용자의 작업속도를 위한 단축키 또는 맞춤 설정 기능을 포함해 주면, 사용자들은 자신에게 적합한 방법을 선택할 수 있습니다.

예시 : photoshop
포토샵 첫 화면을 열면, 초보자를 위한 상세 가이드와 새로 도입된 신기능에 대해서 설명해 주며, 다양한 프리셋과 단축키를 제공한다. 
사용의 유연성과 효율성 - 포토샵

 

 

# 8. 심미적이고 최소화한 디자인(Aesthetic and minimalist design)

예쁜 게 다입니다. 하지만 사용자 입장에서는 불필요한 디자인이 아닌, 가시성 높은 심플한 디자인이 가장 아름다운 디자인입니다. 사용자가 필요한 정보를 놓치게 만드는 인터페이스 요소를 찾아서 수정할 필요가 있습니다.

예시 : 카카오뱅크 
기존 복잡해 보이는 은행 상품과 달리 기능을 한눈에 파악할 수 있는 이미지와 특징을 요약한 슬로건으로 금융 상품 이해를 돕는다
심미적이고 최소화한 디자인 - 카카오 뱅크


 

 

# 9. 사용자가 스스로 오류를 인식, 진단, 복구하도록 지원
(Help users recognize, diagnose, and recover from errors)

양식을 제출할 때 오류가 발생하면, 시스템은 어디에서 무엇이 잘못되었는지, 그 문제를 어떻게 해결하는지 알려 줘야 합니다. 물론 이때 나타나는 오류 메시지는 일반 언어(오류코드가 아닌)로 표현되어야 하며, 문제를 정확하게 표시하고 고쳐야 할 항목을 쉽게 연결해줘야 합니다.

예시 : 윈도우 문제 해결 
관련된 문제들을 점검하고, 어떻게 해결해야하는지 도움을 제공하는 윈도우 문제 해결
솔루션을 클릭하면 현재 문제의 원인과 어떤 해결이 필요한지 알려준다. 
사용자가 스스로 오류를 인식, 진단, 복구하도록 지원 - 윈도우


 

 

# 10. 도움과 문서화 (Help and documentation)

시스템에 추가 설명이 없으면 가장 좋겠지만, 사용자가 작업을 완료하는 방법을 이해시키게 하기 위한 문서를 제공해야 합니다. 도움말과 설명서는 검색하기 편리하고, 사용자의 작업 스텝에 발맞춰 보여줘야 합니다. 간결하게 수행해야 할 구체적인 단계를 나열하세요

예시 : 구글 고객 센터
자주 묻는 질문들을 카테고라이징 하고, 사용 흐름에 따른 상황별 해결책을 문서화로 정리하였다.
도움과 문서화 - 구글 고객 센터

 

 

오늘은 UXUI 사용성 평가를 위한 휴리스틱 평가에 대해서 알아보았습니다. 

다음엔 요구사항 정의서 작성법에 대해서 알아보겠습니다.

반응형
반응형

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#']

 

 

반응형

+ Recent posts