def hankook_detail_url(keyword, num):
import urllib.request
from bs4 import BeautifulSoup
text1 = urllib.parse.quote(keyword)
params=[]
for i in range(1,num+1):
list_url = "https://search.hankookilbo.com/Search?Page=" + str(i) + "&tab=NEWS&sort=relation&searchText=" + text1 + "&searchTypeSet=TITLE,CONTENTS&selectedPeriod=%EC%A0%84%EC%B2%B4&filter=head"
url = urllib.request.Request( list_url )
f = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup( f , "html.parser")
for i in soup.select("div.inn > h3.board-list.h3.pc_only > a") :
params.append( i.get("href") )
return params
def hankook(keyword, num):
import urllib.request
from bs4 import BeautifulSoup
result = hankook_detail_url( keyword, num)
file_text = open("/content/drive/MyDrive/data500/hankook.txt","w",encoding="utf8")
for i in result:
url = urllib.request.Request( i )
f = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup( f , "html.parser")
for i in soup.select("div.innerwrap > div > p"):
file_text.write(i.text + '\n')
file_text.close()
def jjh():
bar_chart_code = """ #1. 판다스
import matplotlib.pyplot as plt
emp = pd.read_csv("/content/drive/MyDrive/data500/emp.csv")
result = emp.groupby('deptno')['empno'].count().reset_index()
result.columns =['deptno', 'cnt']
deptno = result.deptno # 그래프 x 축에 깔릴 컬럼을 지정
values = result.cnt # y 축에 시각화 될 값들을 지정
#2. 시각화 하기
x = [ 0, 1, 2 ] # x 축에 표시될 데이터의 갯수
colors = [ 'y', 'dodgerblue', 'C2' ] # 색깔 5개를 선정
plt.bar( x, values, color = colors ) # plt.bar( x축 데이터, y축 데이터 )
plt.xticks( x, deptno ) # 0,1,2,3,4 대신에 job 을 표시해 줌
plt.show() # 그래프를 시각화 합니다.
"""
pie_chart_code = """ #1. 판다스
import pandas as pd
emp = pd.read_csv("/content/drive/MyDrive/data500/emp.csv")
a = emp16.groupby('telecom')['empno'].count().reset_index()
a.columns = ['통신사', '인원수' ]
a['인원수'].plot( kind='pie', labels= a.통신사, autopct="%0.00f%%")
#2. matplotlib 문법
import matplotlib.pyplot as plt
import pandas as pd
emp16 = pd.read_csv("/content/drive/MyDrive/data500/emp16.csv")
a = emp16.groupby('telecom')['empno'].count().reset_index()
a.columns = ['telecom', 'cnt' ]
plt.pie( list( a.cnt ), labels = list(a.telecom), autopct='%0.00f%%' )
"""
hist_chart = """
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style("darkgrid") # 격자모양을 출력
cars = pd.read_csv("/content/drive/MyDrive/data500/usedcars.csv")
sns.distplot( cars.price , color='blue', kde=False )
"""
swarm_chart = """
import seaborn as sns
tit = pd.read_csv("/content/drive/MyDrive/data500/insurance.csv")
sns.swarmplot( x ='smoker', y ='expenses', data=tit )
"""
line_chart = """
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
money = pd.read_csv("/content/drive/MyDrive/data500/money_data6.csv")
x = money.A_MONTH
y = money.A_RATE
y2 = money.K_RATE
sns.lineplot( x = x, y = y, color='r' , linestyle='--' , marker='o' )
sns.lineplot( x = x, y = y2, color='b' , linestyle='--' , marker='o' )
plt.xticks(tuple(money.A_MONTH) )
plt.title('Amereca Rate')
"""
box_chart = """
import seaborn as sns
sns.boxplot( data=ball )
"""
corr_chart = """
import seaborn as sns
import pandas as pd
#1. 데이터 불러오기
df = pd.read_csv("/content/drive/MyDrive/data500/money_data6.csv")
df.corr() # 상관계수값 확인
#2. 절반 날리는 코드
#삼각형 마스크를 만든다( 위 쪽 삼각형에 True, 아래 삼각형에 False )
mask = np.zeros_like( df.corr() , dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
#3. 상관 그래프 그리기
sns.heatmap( df.corr() , cmap='coolwarm' , annot=True, linewidths=0.2, mask=mask )
"""
word_chart = """
##1. 워드 클라우드 생성을 위한 패키지
# wordcoloud.py 안에 있는 WordCloud 함수를 불러와라
from wordcloud import WordCloud
#2. 한글 안깨지게 한글 폰트 불러오는 코드
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic')
## 3. 데이터 프레임 생성
import pandas as pd
df = pd.read_csv("/content/drive/MyDrive/data500/duk.csv", encoding = "cp949")
## 4. 생성된 데이터 프레임을 딕셔너리로 변환
## wordcolud 함수에 데이터를 제공할 때는 데이터 프레임으로 줄 수 는 없고
# 딕셔너리 형태로 제공 해야 합니다.
wc = df.set_index("title").to_dict()["count"]
wordCloud = WordCloud(
font_path = "NanumBarunGothic", # 폰트 지정
width = 1000, # 워드 클라우드의 너비 지정
height = 800, # 워드클라우드의 높이 지정
max_font_size=150, # 가장 빈도수가 높은 단어의 폰트 사이즈 지정
background_color = 'white' , # 배경색깔
colormap ='Spectral'
).generate_from_frequencies(wc) # 워드 클라우드 빈도수 지정
plt.imshow(wordCloud) # 워드 클라우드 표시
plt.axis('off')
"""
print("""
========= 코드의 복리 효과로 월 천만원 목표 자동화 수익 만들기 =========
1. 막대 그래프 그리기
2. 원형 그래프 그리기
3. 히스토그램 그래프 그리기
4. swarm 그래프 그리기
5. 라인 그래프 그리기
6. 박스 그래프 그리기
7. 상관관계 그래프 그리기
8. 워드 클라우드 그래프 그리기
9. 한국 일보에서 데이터 수집하기
""")
num = int(input('▶ 번호를 선택하세요: '))
if num == 1:
print(bar_chart_code)
elif num ==2 :
print(pie_chart_code)
elif num ==3:
print(hist_chart)
elif num ==4:
print(swarm_chart)
elif num==5:
print(line_chart)
elif num ==6:
print(box_chart)
elif num==7:
print(corr_chart)
elif num==8:
print(word_chart)
elif num == 9:
print('수집한 데이터는 /content/drive/MyDrive/data500/hanbok.txt 로 저장됩니다.')
keyword = input('키워드를 입력하세요')
num_val = int(input('수집할 페이지 번호를 입력하세요'))
hankook(keyword, num_val)