본문 바로가기
  • 데이터야 놀자
데이터 분석 환경

데이터 처리를 위한 파이썬 Pandas 와 Numpy 기본 이해하기

by 데이터랑 2023. 4. 7.
728x90

 

주식 관련 데이터를 대상으로 의미 있는 데이터를 찾아보기 위해

평소에 관심 있던 거래량이나 미결제약정, 거래주체, 신용비율, 공매도 자료 등을 수집해 보고

환율이나, 원자재 등도 연계해서 다각도로 분석하는 작업을 해보려고 한다.

 

데이터 수집관련한 프로그램은 파일럿 수준에서 테스트했으니

이제는 데이터 시각화 하는 프로그램을 테스트할 차례....

 

일단 먼저 2021년부터 최근까지의 우리나라 KOSPI200 주요 업종에 대한

일별 변화율이나 거래대금등을 하나의 그래프에 그려보는 작업을 하기 위해

 

파이썬으로 데이터 수집하고 시각화하다 보니

Pandas의 Dataframe이 매우 유용하기에

기본적 개념이해를 위해 간단히 정리해 보려 한다.

 

KOSPI200 업종별 증감율 추이 그래프
KOSPI200 업종별 증감율 추이 작성

 

Pandas와 Numpy 기본 이해하기

 

 

Pandas Numpy
Pandas
 
- pip install pandas 로 설치

 
Numpy

- pip install numpy 로 설치
- 데이터 분석과 관리용 파이썬 라이브러리
- 시리즈(Series) 데이터프레임(DataFrame) 패널(Panel) 구조
- pd.데이터.values = numpy 구조
- 주로 2차원데이터  활용
- Numerical Python약자로 C언어로 된 파이썬 라이브러리
- 동일한 자료형의 다차원 행열 배열 처리
- 속도측면에서 매우 유리
- pip install numpy 로 설치
- 3차원 이상의 데이터 가능



pd.series (data, index = )
pd.DataFrame(data , index= , columns= , dtype= )
import pandas as pd          # 라이브러리 선언은 필수

## Series 생성 예제 1 - 리스트##############
# index 입력값이 없다면 0부터 순서대로 인덱스번호 부여
data1 = Series(["토트넘", "손흥민" , 30],
             index = ["팀명","선수명","Goal수"])

##  Series 생성 예제 2 - 딕셔너리############
#사전형으로 Series를 생성하면 사전형 key값이 index

dict =  {'a' : 0., 'b' : 1., 'c' : 2.}
data1 = Series(dict)

##  dataframe 생성 예제1 - 딕셔너리 ########
# 열이름을 key로 하고, 리스트를 value로 갖는 딕셔너리 정의
dict_data = ({'KOSPI' :[1915,1961,2026,2467,2041],
                     'KOSDAQ' : [542,682,631,798,675]},
df = pd.DataFrame(dict_data, index=[2014,2015,2016,2017,2018])

########  dataframe 생성 예제2- 시리즈 ########
kospi = pd.Series([1915, 1961, 2026, 2467, 2041],
            index=[2014,2015,2016,2017,2018], name='KOSPI')
kosdaq = pd.Series([542, 682, 631, 798, 675], index=[2014,2015,2016,2017,2018], name='KOSDAQ')

df = pd.DataFrame({kospi.name:kospi, kosdaq.name:kosdaq})

########  dataframe 생성 예제3- 리스트  ########
columns = ['KOSPI', 'KOSDAQ']
index = [2014,2015,2016,2017,2018]
rows=[]
rows.append([1915, 542])
rows.append([1961, 682])
rows.append([2026, 631])
rows.append([2467, 798])
rows.append([2041, 675])
import numpy as np          # 라이브러리 선언은 필수

########  배열 생성 예제 :  array  ##############

alist = [1,2,3]                     ##  리스트 또는 튜플 타입 사용

data_array=np.array(alist)                    ## 1차원, 변수

data_array=np.array([[1,2,3],[4,5,6]])    ## 2차원, 상수

########  배열 생성 예제 :  zeros, ones, full  ##############

data_array=np.zeros((2,2))                   ## 배열전체를 0 로

data_array=np.ones((2,2))                    ## 배열전체를 1 로

data_array=np.full((2,3), 10)                  ## 배열전체를 10으로



########  배열 생성 예제 : arange, linspace  ##########

### .arange([start, ] stop, [step, ] dtype=None)

np.arange(3,7,2)        # =>  array([3, 5])
np.linspace(0,1,5)      # => array([0. , 0.25, 0.5 , 0.75, 1. ])










연산 및 조작 함수 연산 및 조작 함수

1) df.transpose()  또는 df.T



2) df.merge , df.concat

 - Join기준

(병합 예제)






 (연산예제 : add,add, sub, mul, div )


1) np.transpose()



2) np.flatten(option)  # opt : 'C' 는row, 'F' 는 열방향



3) np.reshape()
data_array=np.array(range(20)).reshape((4,5)) ### 결과는

 ----------------------------
 [[ 0 1 2 3 4]
  [ 5 6 7 8 9]
  [10 11 12 13 14]
  [15 16 17 18 19]]
---------------------------




(연산 예제)














# 파일 입출력 예제
df = pd.read_csv('data/Ch4_2_sep.txt', sep='\s+')
( sep : 구분자 Default 는 쉼표(','), \s+ 는 공백이 하나 이상)

pd.read_excel('data/Ch4_9_fifa19.xlsx', sheet_name = ' ')
pd.read_sql(sql_option, conn)

df.to_excel('파일명')


# 정렬 : a.sort()   또는 c.sort(axis=0)
# 삽입 insert  : 특정 인덱스에 원하는 배열을 삽입
# 삽입 ppend : 항상 마지막 인덱스에 배열을 추가


np.delete(arr, obj, axis=None)
np.insert(arr, obj, values, axis=None)
np.append(arr, values, axis=None)
np.hsplit(a,3)   # Split the array horizontally at the 3rd
np.vsplit(c,2)   # Split the array vertically at the 2nd index

 


 

728x90
728x90

댓글