SW과정 머신러닝 1014(7)
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) #하루씩 빼주는 것
Author And Source
이 문제에 관하여(SW과정 머신러닝 1014(7)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@ljsk99499/ml07
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)
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()
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()
판다스 차트 라이브러리 정리
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) #하루씩 빼주는 것
Author And Source
이 문제에 관하여(SW과정 머신러닝 1014(7)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ljsk99499/ml07저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)