336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
import pandas as pd
from pathlib import Path

class SingletonType(type):
def __call__(cls, *args, **kwargs):
try:
return cls.__instance
except AttributeError:
cls.__instance = super(SingletonType, cls).__call__(*args, **kwargs)
return cls.__instance

class CodeMan(object, metaclass=SingletonType):

FILENAME = 'codelist.csv'

def __init__(self):
self.code_df = self.get_code_list()

def get_code_list(self):

code_df = None

if Path(CodeMan.FILENAME).is_file():
print('READ CSV')
code_df = self.read_csv()
else:
print('LOAD DATA')
code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0]
code_df.종목코드 = code_df.종목코드.map('{:06d}'.format)
code_df = code_df[['회사명', '종목코드']]
code_df = code_df.rename(columns={'회사명': 'name', '종목코드': 'code'})
self.write_csv(code_df)

return code_df

def show(self):
print(self.code_df)

def write_csv(self, df):
print('WRITE DATA')
data_df = pd.DataFrame(df, columns=['code', 'name'])
data_df.to_csv(CodeMan.FILENAME, index=False)

def read_csv(self):
df = pd.DataFrame.from_csv(CodeMan.FILENAME, header=0, parse_dates=False)
df.reset_index(inplace=True)
df.code =df.code.map('{:06d}'.format)

return df

def get_daily_url(self, item_name):
code = self.code_df.query("name=='{}'".format(item_name))['code'].to_string(index=False)
url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code)
print("요청 URL = {}".format(url))
return url

def get_price_data(self, item_name, pageno):

url = self.get_daily_url(item_name)
df = pd.DataFrame()

for page in range(1, pageno+1):
pg_url = '{url}&page={page}'.format(url=url, page=page)
df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)

df = df.dropna()

df = df.rename(columns= {'날짜': 'Date', '종가': 'Close', '전일비': 'Diff', '시가': 'Open', '고가': 'High', '저가': 'Low', '거래량': 'Volume'})

df[['Close', 'Diff', 'Open', 'High', 'Low', 'Volume']] = df[['Close', 'Diff', 'Open', 'High', 'Low', 'Volume']].astype(int)

df['Date'] = pd.to_datetime(df['Date'])

df = df.sort_values(by=['Date'], ascending=True)

print(df.head())
return df

def get_min_url(self, item_name, thistime):
code = self.code_df.query("name=='{}'".format(item_name))['code'].to_string(index=False)
url = 'https://finance.naver.com/item/sise_time.nhn?code={code}&thistime={thistime}'.format(code=code, thistime=thistime)
print("요청 URL = {}".format(url))
return url

def get_min_price_data(self, item_name, date, pageno):

url = self.get_min_url(item_name, date)
df = pd.DataFrame()

for page in range(1, pageno+1):
pg_url = '{url}&page={page}'.format(url=url, page=page)
# print(pg_url)
subdf = pd.read_html(pg_url, header=0)[0]
subdf = subdf.dropna()
df = df.append(subdf, ignore_index=True)

if len(subdf)<10:
break

df = df.rename(columns= {'체결시각': 'Date', '체결가': 'Price', '전일비': 'Diff', '매도': 'Ask', '매수': 'Bid', '거래량': 'Volume', '변동량': 'Qty'})
df[['Price', 'Diff','Qty', 'Ask', 'Bid', 'Volume']] = df[['Price', 'Diff','Qty', 'Ask', 'Bid', 'Volume']].astype(int)
df['Date'] = pd.to_datetime(df['Date'])

df =df.set_index(['Date'])
# print(df_volume)
df = df.sort_values(by=['Date'], ascending=True)

return df

def get_ohlc(self, df, period):
df_ohlc = df['Price'].resample(period).ohlc()
# df_ohlc = df.resample('30T', how={'price': 'ohlc'})
df_qty = df['Qty'].resample(period).sum()

frames = [df_ohlc, df_qty]
df2 = pd.concat(frames, axis=1)
return df2


def step1(self, name, date, pageno):
df = self.get_min_price_data(name, date, pageno)
df2 = self.get_ohlc(df, '5T')
print(df2)

# CodeMan.__call__().write_csv()
# CodeMan.__call__().get_price_data('코리안리', 5)
# CodeMan.__call__().get_min_price_data('코리안리', '2018082223', 3)
CodeMan.__call__().step1('코리안리', '2018082223', 100)

------------- 결과 ----------------


                        open     high      low    close    Qty

Date                                                          

2018-08-23 09:00:00  10750.0  10750.0  10700.0  10750.0  11020

2018-08-23 09:05:00  10700.0  10700.0  10700.0  10700.0    735

2018-08-23 09:10:00  10700.0  10700.0  10700.0  10700.0   1647

.....

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
import pandas as pd


class SingletonType(type):
def __call__(cls, *args, **kwargs):
try:
return cls.__instance
except AttributeError:
cls.__instance = super(SingletonType, cls).__call__(*args, **kwargs)
return cls.__instance

class CodeMan(object, metaclass=SingletonType):
def __init__(self):
self.code_df = self.get_code_list()

def get_code_list(self):
code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0]
code_df.종목코드 = code_df.종목코드.map('{:06d}'.format)
code_df = code_df[['회사명', '종목코드']]
code_df = code_df.rename(columns={'회사명': 'name', '종목코드': 'code'})

print(code_df)
return code_df

def show(self):
print(self.code_df)

CodeMan.__call__().show()



--------------- 결과 -------------------


            name    code

0             CJ  001040

1            HDC  012630

2          HSD엔진  082740

3          KG케미칼  001390

4          LG이노텍  011070

5        SH에너지화학  002360

6         SK네트웍스  001740

7            STX  011810

8         STX중공업  071970

9         WISCOM  024070

10       갤럭시아에스엠  011420

11        경동도시가스  267290

12          고려제강  002240

13       골든브릿지증권  001290

14          극동유화  014530

15        금호에이치티  214330

16         까뮤이앤씨  013700

17         노루페인트  090350

18        녹십자홀딩스  005250

19         대덕GDS  004130

20        대림씨엔에스  004440

21          대영포장  014160

22            대웅  003090

23          대원제약  003220

24         대유에이텍  002880

25          동국실업  001620

26          동남합성  023450

27            동방  004140

28      동아쏘시오홀딩스  000640

29            동양  001520

...          ...     ...

2188     하이비젼시스템  126700

2189      한국기업평가  034950

2190     한국제6호스팩  281410

2191         한네트  052600

2192       한라IMS  092460

2193       한양이엔지  045100

2194      한화수성스팩  265920

2195         휴맥스  115160

2196          희림  037440

2197        다이노나  086080

2198        럭스피아  092590

2199    루켄테크놀러지스  162120

2200     메디젠휴먼케어  236340

2201         미애부  225850

2202         빅텐츠  210120

2203       세신버팔로  110660

2204     아이케이세미콘  149010

2205        알로이스  271400

2206       엄지하우스  224810

2207       에이원알폼  234070

2208      에프앤가이드  064850

2209       엔케이맥스  262760

2210        엘피케이  183350

2211  인프라웨어테크놀러지  247300

2212     제이에스피브이  250300

2213          툴젠  199800

2214     티씨엠생명과학  228180

2215          틸론  217880

2216       파인이엠텍  278990

2217       판도라티비  202960


[2218 rows x 2 columns]


+ Recent posts