티스토리 뷰

Data Science

[Python] Pandas module

noonsong 2018. 3. 26. 13:44

1. Pandas (Python Data Analysis Library) 

- 파이썬을 사용한 데이터 분석에서 가장 선호되고, data munging/wrangling (데이터를 분석하기 위하여 데이터를 여러 형태로 변환하는것) 을 위하여 가장 널리 쓰이는 오픈소스 라이브러리이다. 

- 고유하게 정의한 자료구조 (Dataframe, Serise) 를 활용하여 빅데이터 분석에 있어 높은 수준의 퍼포먼스를 발휘하게 해준다. 

- 기존의 Excel 로 하던 모든 분석을 Pandas 를 사용하여 더 큰 스케일에 빠르고 효울적으로 적용할 수 있다. 

- Python 의 데이터타입인 Tuple, Dictionary, Array 만 사용하여 데이터 분석을 하기에는 어려운 점이 많기 때문에 Excel 과 비슷한 row 와 column 형식이 있는 Pandas 를 import 하여 사용한다. 


Pandas URL : http://pandas.pydata.org/

Pandas Document : http://pandas.pydata.org/pandas-docs/stable/ 

- Pandas 모듈 함수 사용법, Pandas 데이터 핸들링 튜토리얼 예제 등 


2. EDA (Exploratory Data Analysis)

Machine Learning (지도학습) 의 과정은 아래와 같이 나눌 수 있다 


1) Data processing (모델링을 위한 전처리과정, 인사이트를 얻기위한 탐색 과정, raw data 수집)

2) Learning (학습 알고리즘, 모델링 과정)

3) Evaluation (학습된 모델을 여러 기준들을 통하여 평가하는 과정)

4) Application (예측, 분류 등 데이터의 활용)


탐색적 자료분석과정 (EDA) 는 가설검증이나 데이터 모형을 적용하기전에, 데이터가 스스로 사람에게 정보를 전달하게 만드는 방법으로 시각적인 기법을 사용하기도 하고 5 숫자 요약이라는 방법을 적용하기도 한다. 


Pandas 를 사용하여 탐색적 데이터 분석을 (EDA) 를 할 수 있고, 데이터를 어떻게 활용할 것인지 결정할 수 있다 

3. Pandas 의 자료구조 

Pandas 에는 2개의 데이터 타입이 있다. 



1) Series : 1차원 데이터 구조. Series 데이터가 2차원이 되면 Dataframe 자료구조와 같다. value 와 index 를 가진다.


import pandas as pd obj = pd.Series([1,2,3,4]) obj


index 가 자동 생성된다 
0    1
1    2
2    3
3    4

obj.values obj.index


Out[5]: array([1, 2, 3, 4], dtype=int64)
Out[6]: RangeIndex(start=0, stop=4, step=1)

obj.index=(['first','second','third','firth'])


index 가 변경된다
first     1
second    2
third     3
firth     4

dtype: int64 


2) DataFrame  : 엑셀, DBMS 테이블과 비슷한 형태를 가진 2차원 구조. Column 과 Row 단위로 작업을 손쉽게 수행할 수 있도록 고안되었다. 


import pandas as pd

frame = pd.DataFrame({'Fruits':['Apple','Melon','Orange','Banana'],
                      'Color':['Red','Green','Orange','Yello']})

frame

    Color  Fruits

0     Red   Apple

1   Green   Melon

2  Orange  Orange

3   Yello  Banana


이렇게 표와같은 형태로 만들어짐 

Spyder 로 확인해보면 편하다. 


import pandas as pd
import sys

names = ['a','b','c','d']
births = [848,33,45,22]
custom = [1,5,44,222]

BabyDataSet = list(zip(names,births))
BabyDataSet


df = pd.DataFrame(data = BabyDataSet,columns=['Names','Births'])


List 형태로 만들어 둔 후에 data 와 column 명으로 Dataframe 을 생성할 수도 있다 

BabyDataSet : [('a', 848), ('b', 33), ('c', 45), ('d', 22)]

df : 

  Names  Births

0     a     848

1     b      33

2     c      45

3     d      22


4. Example Source code 

names = ['a','b','c','d'] births = [848,33,45,22] BabyDataSet = list(zip(names,births))

BabyDataSet  

Out[24]: [('a', 848), ('b', 33), ('c', 45), ('d', 22)]


  • Zip 함수

Python 의 내장함수 zip (interate*) 은 동일한 개수로 이루어진 자료형을 묶어주는 역할을 한다. 

zip 함수는 보통 List 여러개를 slice 할 때 사용한다. 

>>> list(zip([1, 2, 3], [4, 5, 6]))

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

>>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))

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

>>> list(zip("abc", "def"))

[('a', 'd'), ('b', 'e'), ('c', 'f')]


 


# 데이터 I/O
df.to_csv('births.csv', index=True, header=True)
df.to_csv('births.csv', index=False, header=True)
newdf = pd.read_csv('births.csv')
newdf = pd.read_csv('births.csv', names=['Names','Births'])


to_csv : csv 파일로 저장 

read_csv : csv 파일 읽어오기 


# 파일 삭제
import os
os.remove('births.csv')

파일 삭제



# 데이터 살펴보기

df.info()  #Concise summary of a DataFrame.

df.head(3)  #데이터프레임의 인덱스 앞에서부터 n 개의 row 를 가져옴

df.tail(1)  #데이터프레임의 인덱스 끝에서부터 n개의 row 를 가져옴

df['Names'].describe()   #Dataframe 의 statistic 과 data summary 를 보여준다.

df['Names'].unique()    #중복된 값을 삭제한 array 를 반환한다. (Sort 되지 않은 값). 

Sorted = df.sort_values(['Births'], ascending=False)    # 큰 순서대로 sortedarray 에 저장 

Sorted.head(1)   

df['Births'].max()    #가장 큰 값 


df['Names'].describe()  --> 

count     4

unique    4

top       b

freq      1

Name: Names, dtype: object


df['Names'].unique() --> 

array(['a', 'b', 'c', 'd'], dtype=object)


df_row = pd.DataFrame([["new name", 111]], columns=['Names', 'Births']) # 새로운 Data Frame 을 만든다. index가 0으로 자동생성됨 newdf = df.append(df_row) # newdf 에 새로운 DataFrame 을 더한다. 기존 인덱스 0이 있어, 인덱스가 0인 row가 2개가 됨 newdf.loc[0] #loc : index 가 0인 value 가져옴 (2개) newdf = newdf.reset_index(drop=True) #index 를 초기화 (0~n)


Reset_index(drop=True) : 새로운 index column 을 새로 추가하며, 초기화시킨다. 기존의 index column 은 삭제한다 (drop=True). 

drop=True 항목이 없을경우, index column 이 기존것과 새로 추가한것 두개가 된다 



# 무작위 수 이용하기 import random names = ['Bob','Jessica','Mary','John','Mel'] random.seed(123) #랜덤을 위한 seed .무작위수를 넣어도 됨 random_names = [random.choice(names) for i in range(10)] #랜덤 10개 random_births = [random.choice(births) for i in range(10)] random_custom = [random.choice(custom) for i in range(10)] BabyDataSet = list(zip(random_names, random_births, custom)) #? df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births', 'Custom']) df['Names'].unique() # 범주형 데이터 그룹 연산 name = df.groupby('Names') df2 = name.sum() #name 으로 그룹으로 묶은 후 다른 값들을 더함 df2 df2['Births'].value_counts() #값이 몇번씩 나왔는지


randon.seed() 파이썬에서 난수를 반생시키는 함수. seed 값은 난수를 발생시키는 시드값이 된다. 

random.choice(name) for i in range(10)  : name 어레이에서 10개의 랜덤 데이터 추출 

df2[].value_counts() : 각각 value 값이 몇번 나왔는지 카운팅 

df.groupby()

sun () --> 각 name 의 birth 값과 custom 값을 모두 더함 

'Data Science' 카테고리의 다른 글

[Python] Logistic Regression  (0) 2018.06.08
[Python] T-Test and P-Value  (0) 2018.06.08
one-hot-encoding  (0) 2018.05.12
pandas/numpy  (0) 2018.04.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함