ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] 파이썬을 이용한 빅데이터 실습1 - Series
    Languages/python 2021. 9. 12. 20:50
    반응형

     

     

     

     

     

    jupyter notebook 사용하여 실습

     

    https://www.anaconda.com/products/individual

     

     

    Anaconda | Individual Edition

    Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.

    www.anaconda.com

     

    에서 다운로드 가능하다

     

     

     

     

    빅데이터 관련 기술

     

    데이터 소스 - 수집 -저장 - 처리 - 분석 - 표현

     

     

    사용하는 언어는 python

     

     

    1991년 귀도 반 로썸이 발표한 인터프리티 언어

    비단뱀이라는 뜻

     

    파이썬(python) 특징

     

    간결하고 가독성이 높은 문법

    인터프리티언어이다

     

    소스코드 -> 인터프리티 -> cpu/메모리

     

    순차적으로 실행하고, 바로 결과 확인 가능하다

    실행을 누른 후 번역을 하고 실행을 하기 때문에

    컴파일 언어보다 실행 속도가 느리다

     

    파이썬 사용의 장점

     

    데이터 분석 및 인공지능의 다양한 기능을 제공

    -> 데이터 분석 및 인공지능의 다양한 기능을 제공

    결과를 표현할 때 웹 프레임워크 지원

    -> 웹과 연동이 쉬워 확장성이 좋다

     

     

    pandas를 활용하여 실습

     

    쥬피터 노트북은 파이썬을 외부로 받아들여야만 사용가능

     

     01. import 구문 사용하기

    들여쓰기가 잘못되었을 때 발생하는 에러

    python사용 시 공백이나 들여쓰기를 명확하게 지켜주어야 한다

     

     

     

    1차원 데이터의 이해

     

     

    스칼라(scalar)와 백터

     

    스칼라 : 하나의 값

     

    벡터 : 여러 개의 값으로 이루어진 집합

             벡터 = 배열(Array) = 1차원데이터

     

     

     

    python의 1차원 데이터 타입

     

     

    리스트(List)

     

    [3,5,1,2,10]

     

    튜플(Tuple)

     

    ('빅','데','이','터')

     

    리스트는 한 번 생성하고 나서 항목을 수정,삽입,삭제할 수 있지만,

    튜플은 한 번 생성하면 값을 변경할 수 없다(중요)

     

     

    사전(dict)

     

    {'강의명': '빅데이터', '정원': 30, '가격': 100, '위치': '서울'}

     

    강의명   정원  가격  위치 -> 키(key)

    빅데이터  30   100   서울 -> 값(Value)

     

     

     

    pandas의 데이터 타입

     

     

    Series

     

    인덱스(index)와 값(value)으로 구성

     

    인덱스(index)

    숫자 인덱 : 0부터 시작하여 자동부여 - 리스트와 비슷한 형태

    문제 인덱스(= 인덱스 라벨) : 인덱스에 이름(의미)을 부여 - 사전 타입과 비슷한 형태

     

    데이터

    모든 데이터 타입 가능(정수, 실수, 문자열, 리스트, 튜플, ...)

     

     

     

    import 하기

     

    data = [3,5,1,2]
    data
    [3, 5, 1, 2]
    import pandas
    pandas.Series([3,5,1,2])
    0    3
    1    5
    2    1
    3    2
    dtype: int64

     

    별칭을 사용해서 import 하기

     

    'as' 라고 하는 키워드를 쓰고 뒤에 사용하기 편한 별칭을 줌

    보통 줄임말을 사용함

     

     

    import pandas as pd
    pd.Series([3,5,1,2])
    0    3
    1    5
    2    1
    3    2
    dtype: int64

     

     

     

     

     

    series

     

    생성

     

    1차원 데이터를 저장하는 파이썬의 데이터타입인 리스트, 튜플, 사전 타입 들을 이용해서

    Series 객체를 생성해 보고, Series 객체의 특징들을 살펴보도록 함

     

     

     

    sample = Seires([85, 90, 75, 55, 45, 90, 85, 90, 100],
    				index = ['a','b','c','d','e','f','g','h','i','j'])

     

     

    속성[attribute]

     

    Series가 가지고 있는 객체, 속성(특징) 혹은 간단한 기능을 제공

     

    1) index - Seires의 인덱스 (혹은 인덱스 라벨)

     

     

    in : sample.index

     

    index = (['a','b','c','d','e','f','g','h','i','j'] ,dtype='object')

     

     

    2) values - Series의 데이터

     

    sample.values

     

    array([85, 90, 75, 55, 45, 90, 85, 90, 100], dtype=int64)

     

     

    3) size - Seires의 크기(데이터 길이)

     

    sample.size

     

    10

     

     

    4) dtype - Series의 데이터의 데이터 타입

     

    dtype('int64')

     

     

    문자열일 경우 object

     

     

     

     

     

     

     

     

    Series의 함수

     

     

     

     

    함수(method)

     

    속성보다 다양한 기능을 제공

    함수 호출 시 전달되는 자료들을 인자

    각 함수들은 정의된 인자가 있으며, 인자값 토대로 함수 실행

    동일한 함수라고 하더라도 인자값 설정에 따라 동작방식 변동이 가능하다

     

     

    중요!

    함수는 () 를 꼭 사용한다

     

     

    1) describe() - 통계 정보를 한 눈에 제공해주는 함수

     

    2) 통계함수들 - max(), min(), avg(), ...

     

    3) add_prefix(prefix) - 인덱스 라벨 앞에 prefix 문자열을 추가

     

      이 함수에는 인자값이 꼭 필요하다!

     

     

    sample.add_prefix('data-')

     

     

    data-a  85
    data-b  90
    data-c  75
    
    .
    .
    .

     

     

    인자값의 유무는 함수마다 다르다 

    >>> () 의 안자값이 있느냐 없느냐

     

     

     

     

      출력 데이터는 원본 데이터의 반영되지 않는다.

      원본데이터를 바꾸고 싶다면?

      원본데이터에 반영하면 된다!

     

     

     

    sample2 = sample.add_prefix(prefix = 'big-')
    
    sample2
    >>
    big-a  85
    big-b  90
    big-c  75
    big-d  55
    
    .
    .
    .

     

     

     

    4) value_counts() - Seires에 있는 데이터 값을의 갯수

     

    sample.valus_counts()

     

    90  3
    85  2
    95  1
    45  1
    
    .
    .
    .

     

     

    5) add(값) - Series의 데이터 각각에 값을 더하기

     

     

    sample.add(100)

     

    a  185
    b  190
    c  175
    
    .
    .
    .

     

     

    이때!

     

    앞에 5개 데이터에는 5를 더하고, 나머지 5개의 데이터는 10을 더하고 싶다면?

     

    list로 묶어야 한다.

     

    sample.add([5, 10])

     

    >> error

     

    인자값을 모두 동일하게 주어야한다

     

    sample.add([5,5,5,5,5,10,10,10,10,10])

     

    a  90
    b  95
    c  80
    d  60
    e  50
    f  100
    g  105
    h  95
    i  100
    j  110

     

     

     

    6) append(series) - 인자로 받은 seires를 기존 series 뒤에 이어붙여서 하나의 series로 만든다

     

    'k 80' 추가하고 싶다면?

     

    sr = Series(80, index = ['k'])
    
    sample.append(sr)
    
    .
    .
    .
    k  80

     

    인덱스를 사용할 때는 꼭 list로 묶어서 활용

     

     

     

     

    7) isin(val_list) - Seires에 있는 각각의 데이터들이 val_list에 포함되어 있는지 여부를 확인

     

    sample.isin([85])

     

    마찬가지로 값이 하나라도

    인덱스를 사용할 때는 꼭 list로 묶어서 활용

     

     

    85 값만 True인 것이 확인가능하다.

     

     

     

     

    [실습1]sample 데이터 내에 80이 있는지 확인하여 있으면 ture, 없으면 false를 출력

     

    80 in sample.values
    
    False
    
    85 in sample.values
    
    True

     

    [실습2] sample의 인덱스 내에 'h'가 있는지 확인하여 있으면 true, 없으면 false

     

    'h' in sample.index
    
    True

     

     

     

    8) apply(func) - Series의 값에 func 함수를 적용

     

    # 80 이상이면 good 미만이면 bad
    
    def get_grade(val):
    	if val >= 80:
        	return 'good'
        else :
        	return 'bad'
    
    sample.apply(get_grade)
    
    a  good
    b  good
    c  bad
    
    .
    .
    .

     

     

     

     

     

     

    익명함수

    =람다(lamda)함수

    이름이없는 함수

    함수를 재사용할 가능성이 희박하거나

    굉장히 간단한 함수일 경우에만 사용함

     

    sample.apply(lambda val: 'good' if val >=80 else 'bad')
    
    위와 동일한 결과

     

     

    익명함수의 장점

    여러 줄의 코드가 필요한 일반함수에 비해 간결

    메모리의 공간 절약 가능

     

     

     

     

     

    반응형

    댓글

Designed by Tistory.