2021. 8. 19. 00:35ㆍpython/pandas, numpy
# 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
데이터를 읽어들여보아요!
# 우리가 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)
# 영화정보를 가지고 있는 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 |