SW과정 머신러닝 1014(7)

JongseokLee·2021년 10월 14일
0
post-thumbnail

SW과정 머신러닝 1014(7)

1. pandas03 코드 정리

import pandas as pd
import seaborn as sns
tips = sns.load_dataset("tips")
tips.head()
tips.sex.values.categories
tips.sex.values.codes

#Apply 메서드
def my_sq(x):
    return x**2
def my_exp(x,n):
    return x**n
my_sq(3)
my_exp(3,5)
df = pd.DataFrame({'a':[10,20,30],'b':[20,30,40]})
df
df['a'].apply(my_sq)
df.apply(my_sq)
df['a'].apply(my_exp,n=3)
df['a'].apply(lambda x : x**2)

titanic = sns.load_dataset("titanic")
titanic.sample(2)
titanic.info()
import numpy as np
def count_missing(vec):
    return np.sum(pd.isnull(vec))
titanic.apply(count_missing)
def prob_missing(vec):
    num = count_missing(vec)
    dem = vec.size
    return num/dem
titanic.apply(prob_missing)
def prop_complete(vec):
    return 1-prob_missing(vec)
titanic.apply(prop_complete)

2. matplotlib

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np #NumPy("넘파이"라 읽는다)는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리이다.

import warnings
warnings.filterwarnings('ignore') #경고메세지 뜨면 이걸 켜주세요

mpl.rcParams['axes.unicode_minus']=False #좌표에 값이 깨지면 이걸 실행하세요

#선그래프
plot(x,y)
plot(y)

plt.plot([-1,2,3,4],[-2,4,8,16]) #기본 선그래프가 그려짐
plt.plot([1,2,3,4]) #하나만 넣으면 y값만 들어감, 밑에는 인덱스로 대체되어 들어감
plt.plot([1,2,3,4],[1,4,9,16], 'go--') #g는 그린 o는 점선으로 표시
plt.plot([1,2,3,4],[1,4,9,16], 'r+')
x=[1,2,3,4]
y=[1,4,9,16]
plt.plot(x, y, color='green', marker='o', linestyle='dashed', linewidth=2, markersize=12)

x1=[1,2,3,4]
y1=[1,4,9,16]
x2=[4,6,9,14]
y2=[3,6,9,12]
plt.plot(x1, y1, 'g^', x2, y2, 'g-')

data = {'a':np.arange(50),
       'c':np.arange(50),
       'd':np.random.randn(50)}
data['b'] = data['a']+10*np.random.randn(50)
data['d'] = np.abs(data['d'])*100

#data
plt.scatter('a','b',c='c',s='d',marker='^',data=data) #c는 컬러, s는 사이즈, 마커는 모양
names=['group_a','group_b','group_c']
values=[1,10,100]
plt.figure(figsize=(9,3)) #(행, 열)을 뜻함 그래프 만들기 전에 전체 틀부터 만들어주는 작업
plt.subplot(131)
plt.bar(names, values)
plt.subplot(132)
plt.scatter(names, values)
plt.subplot(133) #1행에 3열 3번째
plt.plot(names, values)
plt.suptitle('Categorical plotting') #위쪽 최상위 타이틀(슈퍼타이틀)
plt.show() #차트 위에 텍스트 사라짐

#한글폰트 설정, 세가지 방식이 있음
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.font_manager as fm
import numpy as np

data = np.random.randint(-100,100,50)
data

plt.plot(range(50),data,'r')
plt.title('시간별 가격 추이')
plt.ylabel('주식가격')
plt.xlabel('시간(분)')

fm.findSystemFonts()
fm.fontManager.ttflist
[(f.name,f.fname) for f in fm.fontManager.ttflist if 'Nanum' in f.name][:5]
mpl.font_manager._rebuild() #글씨 표시 안될 때 쿠키 한번 리셋해주는 코드

#1. 경로 이용

path = 'C:\\Windows\\Fonts\\NanumSquareRoundB.ttf'
fontprop = fm.FontProperties(fname=path, size=15)

plt.plot(range(50),data,'r')
plt.title('시간별 가격 추이',fontproperties=fontprop) #kwargs 딕셔너리로 들어감
plt.ylabel('주식가격',fontproperties=fontprop)
plt.xlabel('시간(분)',fontproperties=fontprop)

#2. rcParams 이용
plt.rcParams['font.size']
plt.rcParams['font.family']

plt.rcParams['font.family']='NanumSquareRound'
plt.rcParams['font.size']=18
mpl.rcParams['axes.unicode_minus']=False #좌표에 값이 깨지면 이걸 실행하세요

plt.plot(range(50),data,'r')
plt.title('시간별 가격 추이')
plt.ylabel('주식가격')
plt.xlabel('시간(분)')

#3.fname()
mpl.matplotlib_fname()

3. Kobis Open API

key='cc05f1619fd8b32c880441798bfa3805'
targetDt='20211013'
url=f'http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key={key}&targetDt={targetDt}'
url

from urllib import request
import json, time, datetime
import pandas as pd

res = request.urlopen(url)
result = res.read()
result = json.loads(result) #loads 파일로 된 것 안읽어올때, load는  파일로된걸 읽어올때
result = result['boxOfficeResult']['dailyBoxOfficeList']
pd.DataFrame(result) #데이터 프레임 만들기

#문제 : 오늘날짜 기준으로 이전 30일에 해당하는 데이터를 데이터프레임으로 만드시오

time.localtime()

str_date = time.strftime('%Y%m%d',time.localtime())
str_date

time_date = datetime.datetime.strptime(str_date,'%Y%m%d')
time_date

time_date1=time_date-datetime.timedelta(days=1)

str_date = time_date1.strftime('%Y%m%d')
str_date

time.localtime()
str_date = time.strftime('%Y%m%d',time.localtime())
str_date
time_date = datetime.datetime.strptime(str_date,'%Y%m%d')
time_date
time_date1=time_date-datetime.timedelta(days=1)
str_date = time_date1.strftime('%Y%m%d')
str_date

def BoxOffice(day=30):
    key = 'cc05f1619fd8b32c880441798bfa3805'
    targetDt = time.strftime('%Y%m%d', time.localtime())
    cine=[]
    for i in range(day):
        time_date = datetime.datetime.strptime(targetDt, '%Y%m%d')
        time_date = time_date - datetime.timedelta(days=1)
        targetDt = time_date.strftime('%Y%m%d')
        url = f'http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key={key}&targetDt={targetDt}'
        #print(targetDt)
        res = request.urlopen(url)
        result = res.read()
        result = json.loads(result)
        result = result['boxOfficeResult']['dailyBoxOfficeList']
        #print(result)
        for j in range(len(result)):
            result[j]['targetDt']=targetDt
        cine.extend(result)
    df = pd.DataFrame(cine)
    return df
    
cine = BoxOffice()
cine

time.localtime()
targetDt = time.strftime('%Y%m%d', time.localtime())
time_date = datetime.datetime.strptime(targetDt, '%Y%m%d')
time_date = time_date - datetime.timedelta(days=1)
targetDt = time_date.strftime('%Y%m%d')

pd.unique(cine['targetDt']) #unique() 중복값을 제거하고 유일값만 반환한다.

df = cine.drop('rnum',axis=1) #열단위 제거
df.columns
import matplotlib.pyplot as plt
title = '보이스'
temp = df[df['movieNm']==title]
plt.bar(temp['targetDt'],temp['salesAmt'].astype(int))
plt.title('일별 매출액')
plt.xlabel('날짜')
plt.ylabel('매출액')
plt.xticks(fontsize=10,rotation=90)
plt.show()

title = '보이스'
temp = df[df['movieNm']==title]
temp1 = temp.sort_values(by=['targetDt'])
plt.plot(temp1['targetDt'],temp1['salesAmt'].astype(int)) #기본값이 오브젝트라서 int타입으로 바꿔줌
plt.title(f'{title}의 일별 매출액')
plt.xlabel('날짜')
plt.ylabel('매출액')
plt.xticks(fontsize=10,rotation=90)
plt.show()

cine = BoxOffice()
#cine['salesAmt']=cine['salesAmt'].astype(int)
#temp2 = cine.groupby('movieNm')['salesAmt'].sum() #영화 이름이 같은 것 끼리 묶는 것
cine['salesAmt']=cine['salesAmt'].astype('int64')
temp2 = cine.groupby('movieNm').sum()

temp2['salesAmt'] = temp2['salesAmt'].astype('int64')
temp2.info()
temp2.index

plt.figure(figsize=(15,5))
plt.bar(temp2.index,temp2['salesAmt'])
plt.title('영화별 총 매출액')
plt.xlabel('영화명')
plt.ylabel('총매출액')
plt.xticks(fontsize=9,rotation=90)
plt.show()

cine.groupby('movieNm')['salesAmt'].count()

4 . 주요내용 메모

판다스 차트 라이브러리 정리

Matplotlib 갤러리 바로가기
python import time

time.localtime()
targetDt = time.strftime('%Y%m%d', time.localtime())
time_date = datetime.datetime.strptime(targetDt, '%Y%m%d') #datetime 안에 datetime을 쓰겠다
time_date = time_date - datetime.timedelta(days=1) #하루씩 빼주는 것

profile
DataEngineer Lee.

0개의 댓글