pandas 기초

2021. 8. 19. 00:35python/pandas, numpy

728x90

# Pandas에 대해서 알아보아요!

 

pandas는 data분석 library의 최고봉!!

# excel과 비슷하다 (data를 1g도 못불러들인다)

# 잘만 이용한다면 excel보다 훨씬 다양한 일을 프로그램적으로 자동화 가능
# Pandas는 고유하게 정의된 2개의 자료구조를 가지고 있어요!
# 1. Series : 1차원, 같은 데이터 타입을 사용해요! (ndarry 1차원에 조금 추가한거라고 생각?)
# 2. DataFrame : 2차원, 여러개의 Series를 합쳐서 Table 구조로 만든 자료구조

# module 설치
# anaconda prompt에서 conda install pandas

 

 

numpy

요소를 만들때 값을 모르겠어, 없어는 np.nan 을 이용


import numpy as np
import pandas as pd

# arr = np.array([-1, 5, 10, 99], 
#                dtype=np.float64)
# print(arr)

arr = np.array([-1, 5, 3.14, True, 'Hello'], 
               dtype=object)
# print(arr)
# print(arr.dtype)

######################################

pandas series



s = pd.Series([-1, 5, 10, 99], dtype=np.float64)            #Series만들때 S는 대문자
# print(s)

0 -1.0

1 5.0

2 10.0

3 99.0

dtype: float64


print(s.values)   # Series가 가지고 있는 값에 대한 ndarray만 추출 [-1.  5. 10. 99.]
# print(s.index)      # RangeIndex(start=0, stop=4, step=1)  [0 1 2 3]

# print(type(s.index)) # <class 'pandas.core.indexes.range.RangeIndex'>
# print(s.dtype)     # float64
print(s)

 


 

import numpy as np
import pandas as pd

# Series를 만들어보아요!
s = pd.Series([-1, 8, 10, 99],
             dtype=np.int32,
             index=['b', 'k', 't', 'k'])                           #pandas는 index를 지정할수 있다
# print(s)

print('s[1]의 값은 : {}'.format(s[1]))                           # 숫자 index는 무조건 사용이 가능

8
print('s["k"]의 값은 : {}'.format(s['k']))                        #  index가 곂치면 곂친만큼 값이 나온다

8, 99

 


 

# Series에 대한 slicing을 해 보아요!

s = pd.Series([-1, 8, 10, 99],
             dtype=np.int32,
             index=['b', 'k', 't', 'c'])
# print(s[0:2])     # numpy의 ndarray의 slicing과 같아요!

b -1 k 8 dtype: int32
print(s['b':'t'])   # 문자slicing은 마지막 index가 포함이예요!

b -1 k 8 t 10 dtype: int32

 


# Series에 대한 boolean indexing과 fancy indexing

s = pd.Series([-1, 8, 10, 99],
             dtype=np.int32,
             index=['b', 'k', 't', 'c'])

# print(s[['b','t']])

b -1 t 10 dtype: int32
# print(s[s > 8])

t 10 c 99 dtype: int32
print(s.sum())

116

 


Series를 만드는 또 다른 방법
python의 dictionary를 이용해서 만들어요(dict)

my_dict = {'서울': 1000,
           '부산': 2000,
           '제주': 3000}

s = pd.Series(my_dict)

(key값이 index, value가 값)

서울 1000,
부산 2000

제주 3000


s.name = '지역별 가격'          # series 자체 이름
s.index.name = 'region'        #  index 설명

s.index = ['Seoul', 'Busan', 'Jeju']   # index값 변경가능
print(s)

 

Seoul 1000

Busan 2000

Jeju 3000

Name: 지역별 가격, dtype: int64

 

 

pandas Data Frame


# DataFrame을 만들어보아요!!

요소를 만들때 값을 모르겠어, 없어는 np.nan 을 이용

size(요소)가 안 맞으면 만들어지지 않는다
colum명이 key 값

row는 array 나 list로 표현

 


data = {'이름': ['아이유', '김연아', '홍길동', '장범준'],
        '학과': ['국어국문', '수학', '컴퓨터', '철학'],
        '나이': [25, 29, 23, np.nan]}

df = pd.DataFrame(data)                   DataFrame에 D 와 F 는 대문자

# print(df) 대신 display(df) 를 사용 (아래사진과 같이 나온다)


# 기억해야 하는 몇가지 속성이 있어요!
print(df.shape)   # (4, 3)     몇행 몇열인지, 튜플로 표현
print(df.size)    # 12   (DataFrame안에 몇개의 요소가 들어있는지 알려줘요!)
print(df.ndim)    # 2    몇 차원인지

 



data = {'이름': ['아이유', '김연아', '홍길동', '장범준'],
        '학과': ['국어국문', '수학', '컴퓨터', '철학'],
        '나이': [25, 29, 23, np.nan]}

df = pd.DataFrame(data)

display(df)
# print(df.index)     # RangeIndex(start=0, stop=4, step=1)
# print(df.columns)  # Index(['이름', '학과', '나이'], dtype='object')    #list처럼 생겼으나 집합자료구조이다 list는 아니다
print(df.values)     # 2차원 ndarray 값들이 나온다
print(df.values.dtype)     # object

 

 


데이터를 읽어들여보아요!

student.csv
0.00MB

 

# 우리가 DataFrame을 만들때
# 지금하는 것처럼 일일이 데이터를 손으로 입력하나요?


# DataFrame을 만드는 또 다른 방법
# 1. 파일로부터 Data를 읽어서 DataFrame을 생성
#    CSV(Comma Seperated Value)파일로 부터 데이터를 읽어들여보아요!
#    파일을 만들러 가 보아요!
import numpy as np
import pandas as pd

df = pd.read_csv('./data/student.csv', sep=',') #encoding='CP949'

display(df)

 

 


movies.zip
0.82MB

# 영화정보를 가지고 있는 CSV파일을 불러들여서 확인해 보아요!

 

import numpy as np
import pandas as pd

df1 = pd.read_csv('./data/movie/movies.csv')
df2 = pd.read_csv('./data/movie/ratings.csv')

# display(df2)   # 100836 rows × 4 columns

 

timestamp
# 날짜를 표현하기 위해서는 연월일시분초 형태를 이용하는데 이게 나라마다 달라요!

# 1970년 1월 1일 0시 0분 0초 => 0   기준으로 초마다 늘어난다
# 1970년 1월 1일 0시 0분 1초 => 1
# 1970년 1월 1일 0시 0분 2초 => 2

 

데이터가 너무 많기때문에
# display(df2.head())   # 상위 5개의 데이터만 보여줘요!
# display(df2.head(3))   # 상위 3개의 데이터만 보여줘요!
display(df2.tail())  # 하위5개의 데이터만 보여줘요!

 


my sql과 이용하기

 

 

# Database에 접근해서 내가 원하는 데이터를 일단 추출하고 그 결과를 가지고
# DataFrame을 생성

# 기존에 MySQL을 사용했었는데 그 데이터베이스를 그대로 이용해서 DataFrame을 생성


import pymysql.cursors            # python 프로그램으로 Database에 접근해야 해요!
import numpy as np
import pandas as pd

# 데이터베이스를 기동해야 해요! MySQL 서비스를 실행

# 데이터베이스에 접속해요!
# 접속이 성공하면 접속성공객체(connection)를 하나 return해줘요!


conn = pymysql.connect(host='localhost',
                       user='python',
                       password='python',
                       db='library',
                       charset='utf8')
# print(conn)
# 접속이 성공했으니 SQL(데이터베이스 언어)을 이용해서 질의를 해야 해요!
# 이 질의 결과를 DataFrame으로 만들려고 해요!

sql = 'SELECT bisbn, btitle, bauthor, bprice FROM book'

df = pd.read_sql(sql, con=conn)  #con은 연결을 의미

display(df)   # 748 rows × 4 columns

 

 


import numpy as np 
import pandas as pd

df = pd.read_csv('./data/movie/movies.csv')

display(df)

# 이렇게 만든 DataFrame을 JSON 파일로 저장할 수 있어요!
CSV file => JSON file로 만들어보아요!

# 파일처리(후 저장)를 하려면 1. '파일을 open'
#                                     2. 파일에 내용을 써야해요!
#                                     3. 파일을 close

# with를 이용해 open만 하면 with 구문이 끝나면서 resource의 close가  자동으로 이루어진다

 

with open(파일 경로, 모드) as 파일 객체:
with open('./data/csv_to_json.json', 'w', encoding='utf-8') as f:

    #data/csv_to_json.json(파일명), 어떤용도이냐 'w'는 writing 'r'은 read

    # encoding을잡지않으면 중국,일본,한국어등 영어권을 제외하면 깨진다

    #  as는 별명을 붙이는것
    df.to_json(f, force_ascii=False, orient='columns')
    # json 데이터가 생성되고 column명이 json의 key값이 되요!

    # [참고] 파일명을 쓰지 않으면 저장은 되지 않고 출력만 된다.

 

'python > pandas, numpy' 카테고리의 다른 글

pandas 인덱스 와 컬럼(index & colum)  (0) 2021.08.20
dataframe으로 json이용  (0) 2021.08.19
numpy 3일차  (0) 2021.08.18
numpy 정리  (0) 2021.08.18
numpy 2일차  (0) 2021.08.18