<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%B0%B0%EB%8B%B9_%EC%88%98%EC%9D%B5%EB%A5%A0_%EC%83%81%EC%9C%84_%EC%A2%85%EB%AA%A9_%EA%B2%80%EC%83%89</id>
	<title>파이썬 배당 수익률 상위 종목 검색 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%B0%B0%EB%8B%B9_%EC%88%98%EC%9D%B5%EB%A5%A0_%EC%83%81%EC%9C%84_%EC%A2%85%EB%AA%A9_%EA%B2%80%EC%83%89"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%B0%B0%EB%8B%B9_%EC%88%98%EC%9D%B5%EB%A5%A0_%EC%83%81%EC%9C%84_%EC%A2%85%EB%AA%A9_%EA%B2%80%EC%83%89&amp;action=history"/>
	<updated>2026-04-06T02:11:28Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%B0%B0%EB%8B%B9_%EC%88%98%EC%9D%B5%EB%A5%A0_%EC%83%81%EC%9C%84_%EC%A2%85%EB%AA%A9_%EA%B2%80%EC%83%89&amp;diff=1448&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: == 파이썬 배당 수익률 상위 종목 검색==  &lt;source lang=python&gt;  from pykrx import stock from datetime import datetime, timedelta import pandas as pd import time import numpy as np import sqlite3 import random   con = sqlite3.connect(&#039;krx_data.db&#039;)   # 오늘날짜 기준으로 아직 받지않은 Data를 DB에 다운로드 받기 # 영업일을 List로 가져오기 def make_date_list(start, end):     start = datetime.strptime(start, &#039;%Y%m%d&#039;)     end = datetime.strpt...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EB%B0%B0%EB%8B%B9_%EC%88%98%EC%9D%B5%EB%A5%A0_%EC%83%81%EC%9C%84_%EC%A2%85%EB%AA%A9_%EA%B2%80%EC%83%89&amp;diff=1448&amp;oldid=prev"/>
		<updated>2025-05-23T12:28:44Z</updated>

		<summary type="html">&lt;p&gt;새 문서: == 파이썬 배당 수익률 상위 종목 검색==  &amp;lt;source lang=python&amp;gt;  from pykrx import stock from datetime import datetime, timedelta import pandas as pd import time import numpy as np import sqlite3 import random   con = sqlite3.connect(&amp;#039;krx_data.db&amp;#039;)   # 오늘날짜 기준으로 아직 받지않은 Data를 DB에 다운로드 받기 # 영업일을 List로 가져오기 def make_date_list(start, end):     start = datetime.strptime(start, &amp;#039;%Y%m%d&amp;#039;)     end = datetime.strpt...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 파이썬 배당 수익률 상위 종목 검색==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from pykrx import stock&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import time&lt;br /&gt;
import numpy as np&lt;br /&gt;
import sqlite3&lt;br /&gt;
import random&lt;br /&gt;
 &lt;br /&gt;
con = sqlite3.connect(&amp;#039;krx_data.db&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
# 오늘날짜 기준으로 아직 받지않은 Data를 DB에 다운로드 받기&lt;br /&gt;
# 영업일을 List로 가져오기&lt;br /&gt;
def make_date_list(start, end):&lt;br /&gt;
    start = datetime.strptime(start, &amp;#039;%Y%m%d&amp;#039;)&lt;br /&gt;
    end = datetime.strptime(end, &amp;#039;%Y%m%d&amp;#039;)&lt;br /&gt;
    dates = [(start + timedelta(days=i)).strftime(&amp;#039;%Y%m%d&amp;#039;) for i in range((end-start).days+1)]&lt;br /&gt;
    b_dates = []&lt;br /&gt;
    for d in dates:&lt;br /&gt;
        b_day = stock.get_nearest_business_day_in_a_week(d)&lt;br /&gt;
        if not b_day in b_dates:&lt;br /&gt;
            b_dates.append(b_day)&lt;br /&gt;
            s = random.randint(1, 3)&lt;br /&gt;
            time.sleep(s)&lt;br /&gt;
 &lt;br /&gt;
    return b_dates&lt;br /&gt;
 &lt;br /&gt;
# Data를 다운로드 받기&lt;br /&gt;
def data_download(date):&lt;br /&gt;
    codes = stock.get_market_ticker_list(date, market=&amp;#039;ALL&amp;#039;) # code list 만들기&lt;br /&gt;
    corp = [] #Code와 Name을 저장할 List&lt;br /&gt;
    for code in codes:&lt;br /&gt;
        name = stock.get_market_ticker_name(code) #종목 이름 가져오기&lt;br /&gt;
        corp.append([code, name]) #Code와 이름으로 리스트를 만들기&lt;br /&gt;
    df1 = pd.DataFrame(data=corp, columns=[&amp;#039;code&amp;#039;, &amp;#039;종목명&amp;#039;])#code와 종목명을 데이터프레임으로 만들기&lt;br /&gt;
    df1.index = df1[&amp;#039;code&amp;#039;] #index를 코드로 만들기&lt;br /&gt;
 &lt;br /&gt;
    df_f = stock.get_market_fundamental_by_ticker(date=date, market=&amp;#039;ALL&amp;#039;)#BPS, PER, PBR, EPS, DIV, DPS 가져와서 데이터 프레임 만들기&lt;br /&gt;
    df_c = stock.get_market_cap_by_ticker(date=date, market=&amp;#039;ALL&amp;#039;)#종가, 시가총액, 거래량, 거래대금, 상장주식수 가져오기&lt;br /&gt;
 &lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
 &lt;br /&gt;
    df = pd.merge(df1, df_c, left_index=True, right_index=True) #종목명, 종가, 시가총액, 거래량, 거래대금, 상장주식수&lt;br /&gt;
    df = pd.merge(df, df_f, left_index=True, right_index=True) #위에 df + PER, PBR...&lt;br /&gt;
    #column은 &amp;#039;종목명&amp;#039;, &amp;#039;종가&amp;#039;, &amp;#039;시가총액&amp;#039;, &amp;#039;거래량&amp;#039;, &amp;#039;거래대금&amp;#039;, &amp;#039;상장주식수&amp;#039;, &amp;#039;BPS&amp;#039;, &amp;#039;PER&amp;#039;, &amp;#039;PBR&amp;#039;, &amp;#039;EPS&amp;#039;, &amp;#039;DIV&amp;#039;, &amp;#039;DPS&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
    df[&amp;#039;일자&amp;#039;] = np.array([date]*len(df))&lt;br /&gt;
    df = df.set_index(&amp;#039;일자&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
    return df&lt;br /&gt;
 &lt;br /&gt;
#DB에서 마지막 행 구하기&lt;br /&gt;
db_last_df = pd.read_sql(&amp;quot;SELECT 일자, code, 종목명, DIV, DPS FROM fundamental ORDER BY ROWID DESC LIMIT 1&amp;quot;, con)&lt;br /&gt;
db_last_date = db_last_df[&amp;#039;일자&amp;#039;].iloc[0] #마지막 행에서 날짜 구하기&lt;br /&gt;
db_last_date = datetime.strptime(db_last_date, &amp;#039;%Y%m%d&amp;#039;)&lt;br /&gt;
start_date = (db_last_date + timedelta(days=1)).strftime(&amp;#039;%Y%m%d&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
#오늘날짜 구하기&lt;br /&gt;
today = datetime.today().strftime(&amp;#039;%Y%m%d&amp;#039;)&lt;br /&gt;
end_date = stock.get_nearest_business_day_in_a_week(today, prev=True)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
# 데이터 받아서 데이터프레임으로 합치고, DB에 저장&lt;br /&gt;
if start_date &amp;lt; end_date:&lt;br /&gt;
    try:&lt;br /&gt;
        dates = make_date_list(start_date, end_date)&lt;br /&gt;
        print(dates)&lt;br /&gt;
        for n, date in enumerate(dates):&lt;br /&gt;
            print(date)&lt;br /&gt;
            if n == 0:&lt;br /&gt;
                t_df = data_download(date)&lt;br /&gt;
            else:&lt;br /&gt;
                t_df = pd.concat([t_df, data_download(date)])&lt;br /&gt;
            time.sleep(1) #혹시나 차단될 수 있으니깐&lt;br /&gt;
        print(t_df)&lt;br /&gt;
        con = sqlite3.connect(&amp;quot;krx_data.db&amp;quot;)&lt;br /&gt;
        t_df.to_sql(&amp;#039;fundamental&amp;#039;, con, if_exists=&amp;#039;append&amp;#039;)&lt;br /&gt;
    except:&lt;br /&gt;
        pass&lt;br /&gt;
 &lt;br /&gt;
# 과거 5년간의 Dataframe 구하기&lt;br /&gt;
def filter_by_period(today, ticker):&lt;br /&gt;
    start = str(int(today[:4]) - 5) + today[-4:]&lt;br /&gt;
    end = str(today)&lt;br /&gt;
    df = pd.read_sql(&amp;quot;SELECT 일자, code, 종목명, DIV, DPS FROM fundamental WHERE code = &amp;#039;&amp;quot; + ticker + &amp;quot;&amp;#039;&amp;quot; +&lt;br /&gt;
                     &amp;quot; AND 일자 &amp;gt;= &amp;quot; + start + &amp;quot; AND 일자 &amp;lt; &amp;quot; + end, con)&lt;br /&gt;
    return df&lt;br /&gt;
 &lt;br /&gt;
div = 8&lt;br /&gt;
 &lt;br /&gt;
today_df = pd.read_sql(&amp;quot;SELECT 일자 FROM fundamental ORDER BY ROWID DESC LIMIT 1&amp;quot;, con)&lt;br /&gt;
#DB에서 마지막 행 구하기&lt;br /&gt;
today = today_df[&amp;#039;일자&amp;#039;].iloc[0] #마지막 행에서 날짜 구하기&lt;br /&gt;
today_df = pd.read_sql(&amp;quot;SELECT 일자, code, 종목명, DIV, DPS, EPS FROM fundamental WHERE 일자 = &amp;quot;&lt;br /&gt;
                       + today + &amp;quot; AND EPS &amp;gt; 0&amp;quot; + &amp;quot; AND DPS &amp;gt; 0 AND DIV &amp;gt; &amp;quot; +&lt;br /&gt;
                       str(div), con)&lt;br /&gt;
 &lt;br /&gt;
# 오늘 날짜 기준으로 Data를 분석하기&lt;br /&gt;
to_see_codes = []&lt;br /&gt;
count = 0&lt;br /&gt;
for code in today_df[&amp;#039;code&amp;#039;]:&lt;br /&gt;
    try:&lt;br /&gt;
        print(len(today_df[&amp;#039;code&amp;#039;]) - count)&lt;br /&gt;
        t_df = today_df[today_df[&amp;#039;code&amp;#039;] == code]&lt;br /&gt;
        name = t_df[&amp;#039;종목명&amp;#039;].iloc[0]&lt;br /&gt;
        t_div = t_df[&amp;#039;DIV&amp;#039;].iloc[0]  # 기준일자의 DIV&lt;br /&gt;
 &lt;br /&gt;
        df = filter_by_period(today, code)&lt;br /&gt;
        m = int(len(df[&amp;#039;DPS&amp;#039;]) / 2)&lt;br /&gt;
        if df[&amp;#039;DPS&amp;#039;].iloc[0] &amp;lt;= df[&amp;#039;DPS&amp;#039;].iloc[-1] and df[&amp;#039;DPS&amp;#039;].iloc[0] != 0 and \&lt;br /&gt;
                df[&amp;#039;DPS&amp;#039;].iloc[m] &amp;lt;= df[&amp;#039;DPS&amp;#039;].iloc[-1]:&lt;br /&gt;
            if df[&amp;#039;DIV&amp;#039;].max() * 0.9 &amp;lt; t_div:&lt;br /&gt;
                to_see_codes.append([today, code, name, t_div])&lt;br /&gt;
    except:&lt;br /&gt;
        pass&lt;br /&gt;
    count += 1&lt;br /&gt;
 &lt;br /&gt;
total_df = pd.DataFrame(data=to_see_codes, columns=[&amp;#039;기준일&amp;#039;, &amp;#039;Code&amp;#039;, &amp;#039;종목명&amp;#039;, &amp;#039;배당률&amp;#039;])&lt;br /&gt;
print(total_df)&lt;br /&gt;
total_df.to_excel(&amp;#039;배당률로 선별한 종목 DIV &amp;#039;+ str(div) + &amp;#039;이상&amp;#039; + today +&amp;#039;.xlsx&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
[[category:python]]&lt;br /&gt;
[[category:주식]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>