# -*- coding: utf-8 -*-
# db 연결
import sqlite3
con = sqlite3.connect("C:/pythonwork/naver_db")
import pandas as pd
from pandas import Series, DataFrame

readed_df = pd.read_sql("SELECT * FROM naver_table", con)
print(readed_df.describe())


# 문제1. 평균/최대/최소/4분위 값을 각각 구하시오

# 평균
mean=readed_df["가격"].mean()
print(mean)
# 최대
max=readed_df["가격"].max()
print(max)
# 최소
min=readed_df["가격"].min()
print(min)

# 4분위
import pandas as pd
quantile=readed_df["가격"].quantile()
total=pd.DataFrame({"4분위값":quantile},index=[0])
print(total)


# 문제2. 읽어들인 데이터를 MatplotLib으로 구하시오
import matplotlib.pyplot as plt
plt.plot(readed_df["제품명"], readed_df["가격"])

print(read_df)
con.commit()
con.close()

 

# BeautifulSoup 사용하기

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc,'html.parser')

# html 문서의 계층 구조를 알기 쉽게 보여준다.(마치 코드 처럼)
print(soup.prettify()) 
''''
<html>
 <head>
  <title>
   The Dormouse's story
  </title>
 </head>
 <body>
  <p class="title">
   <b>
    The Dormouse's story
   </b>
  </p>
  <p class="story">
   Once upon a time there were three little sisters; and their names were
   <a class="sister" href="http://example.com/elsie" id="link1">
    Elsie
   </a>
   ,
   <a class="sister" href="http://example.com/lacie" id="link2">
    Lacie
   </a>
   and
   <a class="sister" href="http://example.com/tillie" id="link3">
    Tillie
   </a>
   ;
and they lived at the bottom of a well.
  </p>
  <p class="story">
   ...
  </p>
 </body>
</html>
'''

#타이틀 태그나 태그명을 추출하고 싶을 경우
soup.title
print(soup.title)
#<title>The Dormouse's story</title>

# 타이틀 태그의 이름('title')을 반환
soup.title.name
print(soup.title.name)
# title

#타이틀태그의 문자열을 반환
soup.title.string
print(soup.title.string)
#The Dormouse's story

# 타이틀 태그의 부모 태그의 이름을 반환
soup.title.parent.name
print(soup.title.parent.name)
# head

# 첫 p 태그를 반환
soup.p
print(soup.p)
#<p class="title"><b>The Dormouse's story</b></p>

#'class' 속성이 있는 첫 p태그를 반환
print(soup.p['class'])
# ['title']

# 첫 a 태그를 반환
soup.a
print(soup.a)
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>


#모든 a태그를 리스트 형태로 반환
soup.find_all()
print(soup.find_all('a'))
#[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

# soup.find() 설정한 값에 해당하는 태그를 반환.
# id가 link3인 태그를 반환.
soup.find(id="link3")
#<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>


#.get() : href 속성을 반환.
for link in soup.find_all('a'):
    print(link.get('href'))

#http://example.com/elsie
#http://example.com/lacie
#http://example.com/tillie


#get_text() :html 문서 안에 있는 텍스트를 반환
print(soup.get_text())
'''
The Dormouse's story

The Dormouse's story
Once upon a time there were three little sisters; and their names were
Elsie,
Lacie and
Tillie;
and they lived at the bottom of a well.
...

-----------------------------------------------------------------
#requests 기본 사용

html 소스 가져오기
requests를 사용하면 아래와 같이 간단한 코드만으로
웹페이지의 html 소스를 가져올 수 있다.
'''

import requests

'''
웹페이지의 content를 유니코드 형태가 아니라 bytes 형태로 얻기 위해서는
r.text가 아닌 r.content를 사용할 수도 있다.
'''
r = requests.get('https://google.com')
html = r.content
print(html)


#response 객체 ㅣesquest.get()의 반환 객체
'''
response 객체는 HTTP request에 의한 서버의 응답 정보를 갖고 있다,
starus_code, headers, encoding, ok등의 속성을 이용하면
다양한 정보를 얻을 수 있디.
'''
r = requests.get('https://google.com')
html = r.content

print(r.status_code)
print(r.headers['Content-Type'])
print(r.encoding)
print(r.ok)

'''
status_code는
정상일 경우 200, 페이지가 발견되지 않을 경우 404

encoding 방식은 ISO-8859-1이고
요청에 대한 응답이 정상적으로 이루어 졌음을 알 수 있다.

(status_code가 200 보다 작거나 같은 경우 True, 그렇지 않는 경우 False)
'''
'''
만약 인코딩 방식이 달라서 한글이 재대로 표시되지 않으면
아래와 같이 인코딩 방식을 변경.
'''

r.encoding ='UTF-8'

'''
requests를 이용해서 html 소스를 가져왔지만
단순한 문자열 형태이기 때문에 파싱(parsing)에 적합하지 않다.
그렇기 떄문에 BeautifulSoup으f 이용해서
파이썬 html 소스를 분석하고 데이터를 추출하기 편리하도록
객체로 변환
'''

# 많이 본 네이버 뉴스
'''
파이썬 과 BeautifulSoup을 이용하면
이 웹 크롤러를 간단하게 만들 수 있다.
네이버 뉴스의 많이 본 뉴스를 가져오기
'''

import requests
from bs4 import BeautifulSoup

'''
https://news.naver.com/main/ranking/popularDay.nhn?rankingType=popular_day&date=20190430

위의 주소에서 알 수 있듯이 맨위에 날짜를 바꿔주면 
해당하는 날짜의 많이 본 뉴스를 볼 수 있다.
'''

url = 'https://news.naver.com/main/ranking/popularDay.nhn?rankingType=popular_day&date=20190430'

r = requests.get(url)
html = r.content
soup = BeautifulSoup(html,'html.parser')

# 태그안에 태그를 찾고 싶다.
# 원하는 데이터 추출하기
# 네이버 많이 본 뉴스 페이지에서 헤드라인만 추출해서 출력

titles_html = soup.select('.ranking_section > ol >li >dl >dt >a')

# 30개의 헤드라인이 순서대로 출력
for i in range(len(titles_html)):
     print(i+1, titles_html[i].text)
    
# 삼성전자 주식 일별 시세 가져오기
 '''
네이버 증권에서 제공하는
삼성전자 종목(005930)의 일별 시세를 가져오가

주소:http://finance.naver.com/item/sise_day.nhn?code=005930
위의 주소와 같이 뒷부분에
code=005930와 같이 종목코드를 입력해주면
해당 종목의 일별시세를 볼 수 있다.
'''

#원하는 데이터 추출하기
'''
종목의 일별시세 페이지에서
날짜,종가, 거래량만 추출해서 출력해보겠다,

개발자 도구 (컨트롤 + 쉬프트 +i 또는 F12)를 통해 소스를보면
날짜, 종가, 거래량이 나온 부분을 찾을 수 있다.

'table', 'tr', 'td'태그 안의 텍스트임을 할 수 있다.
'''

import requests
from bs4 import BeautifulSoup as bs

#종목의 코드와 페이지 수를 입력하는 함수.
def print_stock_price(code,page_num):
    #result에는 날짜, 종가, 거래량이 추가된다.
    result = [[],[],[]]

    #주소 뒷부분에 &page=2와 같은 형식으로 연결해주면
    #해당페이지의 일별시세를 볼 수 있다.
    for n in range(page_num):
        url="http://finance.naver.com/item/sise_day.nhn?code="+code+'&page='+str(n+1)

        r = requests.get(url)
        html = r.content
        soup = bs(html,"html.parser")

        #table 안의 tr태그를 리스트형태로 가져온다.
        tr = soup.select('table>tr')

        #첫번째 tr태그는 th태그가,
        #마지막 tr태그는 페이지 넘버가 있어서 제외
        for i in range(1, len(tr)-1):
            #text가 없는 row가 존재.
            if tr[i].select('td')[0].text.strip():
                #text가 있는 row에 대해서
                #첫번째(날짜),두번재(종가),일곱번째(거래량)
                #td태그의text를 가져온다.
                result[0].append(tr[i].select('td')[0].text.strip())
                result[1].append(tr[i].select('td')[1].text.strip())
                result[2].append(tr[i].select('td')[6].text.strip())

    for i in range(len(result[0])):
        print(result[0][i],result[1][i],result[2][i])
#------------------------print_stock_price end
            
#해당 종목의 코드와 50페이지를 입력
stock_code = '005930'
pages = 50

#날짜, 종가, 거래량이 최근순으로 출력
print_stock_price(stock_code,pages)

'''
Matplotlib 기본 사용

Matplotlib 라이브러리를 이용하여 그래프를 그리는 일반적인 방밥

#pyplot 소개

matplotlib.pyplot은
Matplotlib을 MATLAB과 비슷하게 동작하도록 명력어 스타일의 함수의 모음
각각의 pyplot 함수를 사용해서 그림(figure)에 변화를 줄 수 있다.
예를 들어
그림을 만들어서 플롯 영역을 만들고
몇개의 라인을 플롯하고
(label)라벨들로 꾸미는 등의 일을 할 수 있다.
'''

# 기본 그래프
'''
pyplot으로 어떤 값들을 시각화하는 것은 매우 간단.
pyplot.polt()에 하나의 리스트를 입력함으로써 그래프가 그려진다.

matplotlib은 리스트의 값들이 y 값들이라고 가정하고
x값들 ([1,2,3,4])을 자동으로 만들어낸다.
'''
import matplotlib.pyplot as plt

plt.plot([1,2,3,4])
plt.ylabel('y-label')
plt.show()  

'''
plot()은 다재다능한(versatile)한 명령어여서,
임의의 개수의 인자를 받을 수 있다,
예를 들어 아래와 같이 입력하면 x와 y 값을 그래프로 나타낼수 있다.
'''
plt.plot([1,2,3,4],[1,4,9,16])

# 스타일 지정하기

'''
x,y값 인자에 대해
색상과 선의 형태를 지정하는 포맷 문자열을 세번쨰 인자에 입력할 수 있다.
디폴드 포맷 문자열은 'b-'인데 파란색의 선(line,'-')을 의미
아래의 'ro'는 빨간색의 원형(circle,'o') 마커를 의미
'''

import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[1,4,9,16],'ro')

#axis()를 이용하여 축의 [xmin,xmax,ymin,ymax]범위를 지정
plt.axis([0,6,0,20])
plt.show()


#여러 개의 그래프 그리기
'''
matplotlib에서 리스트만 가지로 작업하는 것은 제한적이기 떄문에,
일반적으로 Numpy 어레이를 이용
사실, 모든 시퀸스는 내부적으로 Numpy 어레이로 반환 된다.
'''
#다양한 포맷스타일의 여러 개의 라인을 하나의 그래프로 그리기

import matplotlib.pyplot as plt
import numpy as np

#200ms 간격으로 균일한 샘플된 시간
t=np.arange(0.,5.,0.2)


#빨간 대쉬, 파란 사각형 녹색 삼각형

plt.plot(t,t,'r--',t,t**2,'bs',t,t**3,'g^')
plt.show()     

'''
Matplotlib라벨 설정하기

xlable(), ylabel() 함수를 사용해서
그래프의 x,y축에 대한 라벨을 설정 할 수 있다.

plt.polt([1,2,3,4],[1,4,9,16]) 

xlable(), ylabel()에 텍스트를 입력해주면 각각의 축에 라벨이 나타난다.
'''
import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[1,4,9,16])
plt.xlabel('X-Label')
plt.ylabel('Y-Label')
plt.axis([0,5,0,20])
plt.show()

'''
axis()에 [xmin,xmax,ymin,ymax]의 형태로 x,y축의 범위를 지정
입력 리스트는 꼭 네개의 값 [xmin,xmax,ymin,ymax]이 있어야 한다.

입력값이 없으면 데이터에 맞게 자동(Auto)으로 범위를 지정.
'''


'''
Matplotlib 색깔 지정하기
자주 사용하는 색깔 외에도 다양한 색상을 지정할 수 있다.
polt()에 color='springgreen' 과 같이 입력해주면 색상이 적용된다..
'''
import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[1,4,9,16],color='springgreen')
plt.xlabel('X-Label')
plt.ylabel('Y-Label')
plt.axis([0,5,0,20])
plt.show()

'''
Matplotlib 색깔 지정하기2
16진수 코드(hex code)로도 색깔을 지정할 수 있다.
색깔, 마커와 선의 종류까지 모두 지정

색깔은 '#e35f62'와 같이 16진수로, 마커는 circle,
선의 종류는 대쉬(dashed)로 지정
'''
import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[1,4,9,16], color='#e35f62', marker='o', linestyle='--')
plt.xlabel('X-Label')
plt.ylabel('Y-Label')
plt.axis([0,5,0,20])
plt.show()
'''
Matplotlib 여러 곡선 그리기
세 개의 곡선을 하나의 그래프에 그리기
'''
import matplotlib.pyplot as plt
import numpy as np
'''
Numpy를 사용해서 array를 생성
numpy.array()
주어진 각격에 따라 균일한 array를 생성한다
'''
a=np.arange(5)#범위 [0 1 2 3 4]
b=np.arange(1,5) # [1 2 3 4]
c=np.arange(2,10,2)# [2 4 6 8]

print(a) 
print(b)
print(c)

'''
array a는 [0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8]
'''
a = np.arange(0,2,0.2)
'''
plot() 에 x 값, y 값, 스타일을 순서대로 세 번씩 입력하면, 
세 개의 곡선 (y=x, y=x^2, y=x^3)이 동시에 그려진다.
'''

plt.plot(a,a,'r--',
         a,a**2,'bo',
         a,a**3,'g-')
'''
'r--':빨간색의 대쉬 스타일 선
'bo' : 파란색의 circle 마커
'g-' :녹색의 대쉬-닷 스타일 선을 의미
'''
#세 개의 곡선의 세세한 스타일을 설정 할 수 있다.
import matplotlib.pyplot as plt
import numpy as np

a = np.arange(0, 2, 0.2)

# 첫 번째 곡선의 스타일은 'bo'로,
plt.plot(a, a, 'bo')

# 두 번째 곡선은 color='#e35f62', marker='*', linewidth=2로,
plt.plot(a, a**2, color='#e35f62', marker='*', linewidth = 2)

# 세 번째 곡선은 color='springgreen, marker='^', markersize=9로
plt.plot(a, a**3, color='springgreen', market='^', markersize=9)


'''
Matplotlib 그리드와 틱 설정하기

grid() 와 tick_parms()를 이용해서
그래프의 그리드와 틱의 스타일을 설정할 수 있다.
'''
import matplotlib.pyplot as plt
import numpy as np

a = np.arange(0, 2, 0.2)

# 첫 번째 곡선의 스타일은 'bo'로,
plt.plot(a, a, 'bo')

# 두 번째 곡선은 color='#e35f62', marker='*', linewidth=2로,
plt.plot(a, a**2, color='#e35f62', marker='*', linewidth = 2)

# 세 번째 곡선은 color='springgreen, marker='^', markersize=9로
plt.plot(a, a**3, color='springgreen', market='^', markersize=9)

'''
그리드가 표시되도록하려면,
grid()의 첫번째 파라미터를 True로 설정

axis='y'로 설정하면 y축의 그리드만 표시

alpha는 투명도를 설정합니다
0으로 설정하게되면 투명
1은 불투명

linestyle을 대쉬(Dached)로 설정
'''
plt.grid(True, axis='y', color='gray', alpha=0.5, linestyle='--')

'''
tick_parms() 를 이용해서 그래프의 틱에 관련되 설정을 할 수 있다
 
axis='both'로 설정하면 x,y축의 틱에 모두 적용
 
direction='in'으로 틱의 방향을 그래프 안쪽으로 설정
 
틱의 길이를 3만큼하고
틱과 라벨의 거리를 6만큼
틱 라벨의 크기를 14로 설정
'''
plt.tick_params(axis='both', direction='in', length=3, pad=6, labelsize=14)

plt.show()

# Matplotlib 타이틀 설정하기
# title() 을 이용해서 그래프의 제목(타이틀)을 설정.
'''
plt.title()을 이용해서 그래프의 타이틀을 'Sample graph'로 설정.
'''
plt.title('Sample graph')
plt.show()

# 2 - 위치와 오프셋
plt.title('Sample graph', loc = 'right', pad=20)
'''
loc ='right'로 설정하면,
타이틀이 그래프의 오른쪽 위에 나타나게 된다.

'left', 'center', 'right'로 설정할 수 있으며
디폴트는 'center'

pad = 20 은
타이틀과 그래프와의 간격(오프셋)을 포인트 단위로 설정.
'''
# 3- 폰트 설정
'''
fontdict 에 딕셔너리 형태로 폰트에 대한 설정을 입력할 수 있다.
'fontsize'를 16으로, 'fontweight'를 'bold'로 설정.

'fontsize'는 포인트 단위의 숫자를 입력하거나,
'smaller', 'x-large' 등의 상대적인 설정을 할 수 있다.

'fontweight'에는 'normal', 'bold', 'heavy', 'light', 'ultrabold', 'ultralight'의
설정을 할 수 있다.
'''
title_font = {
    'fontsize':16,
    'fontweight':'bold'
    }
plt.title('Sample graph',fontdict=title_font, loc = 'left', pad=20)

# Marplotlib 막대그래프 그리기
'''
bar() 함수를 이용해서 막대 그래프(bar graph)를 그릴 수 있다.
연도별 값을 갖는 데이터를 막대 그래프로 플롯.
'''
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(3)

# years는 x축에 표시될 연도이고, values는 y값.
years = ['2017', '2018', '2019']
values = [100, 400, 900]

# 먼저 bar() 함수에 x(=[0, 1, 2])와 값(=[100, 400, 900])을 입력.
plt.bar(x, values)
values = [100, 400, 900]

# 먼저 bar() 함수에 x(=[0,1,2])와 값(=[100,400,900])을 입력.
plt.bar(x, values)

'''
xticks()에 x와 years를 입력해주면,
x축에 '2017', '2018', '2019'가 순서대로 표시된다.

'''
plt.xticks(x,years)
plt.show()

'''
막대그래프에도
막대와 테두리의 색, 두께 등 다양한 스타일을 적용할 수 있다.

우선 bar() 함수에 x, y(=values)값을 입력.
'''

plt.bar(x, values,
        width=0.6,
        align='edge',
        color='springgreen',
        edgecolor='gray',
        linewidth=3,
        tick_label=years,
        log=True)

'''
barh()를 이용하면 수평 막대 그래프를 그릴 수 있다.
'''
y = np.arange(3)
plt.barh(y,values,
         height=-0.6,
         color='springgreen',
         edgecolor='gray',
         linewidth=3,
         tick_label=years,
         log=False)
plt.show()

# https://matplotlib.org/contents
# 여기서 필요한 모양의 그래프들과 소스를 확인 및 다운할 수 있다.


# Numpy 난수 생성(Random 모듈)
# 난수 생성에 활용할 수 있는 Numpy의 random 모듈(numpy.random)

# 1- random.rand() : 주어진 형태의 난수를 생성.
import numpy as np

# 예제1
'''
만들어진 난수 array는 주어진 값에 의해 결정되며,
(0,1) 범위에서 귬일한 분포를 갖는다.
'''
a = np.random.rand(5)
print(a)
'''
결과 : [0.75004981 0.21139253 0.45048688 0.94381202 0.00407233]
'''

'''
random.rand() 주어진 형태의 난수 array를 생성

random.randint() [최저값, 최대값]의 범위에서 임의의 정수

random.randn() 표준정규분포(standard normal distribution)를 갖는 난수를 반환

random.standard_normal() : randn()과 standard_normal() 은 기능이 비슷하지만, 
                        standard_normal()은 튜플을 인자로 받는다는 점에서 차이가 있다.
                        
random.random_sample() : [0.0, 1.0) 범위의 임의의 실수를 반환
                          
random.choice() : 주어진 1차원 어레이에서 임의의 샘플을 생성

random.seed() : 난수 생성에 필요한 시드를 정한다. 코드를 실행할 때 마다 똑같은 난수가 생성
'''

# Matplotlib 산점도 그리기
# scatter() 를 이용해서 산점도(scatter plot)를 그릴 수 있다.

import matplotlib.pyplot as plt
import numpy as np
'''
np.random.seed() 를 통해서 난수 생성의 시드를 설정하면,
같은 난수를 재사용할 수 있다.

seed() 에 들어갈 파라미터는
0에서 4294967295 사이의 정수여야 한다.
'''

# 1 - random.rand() : 주어진 형태의 난수를 생성.
import numpy as np

'''
만들어진 난수 array는 주어진 값에 의해 결정되며,
[0, 1) 범위에서 균일한 분포를 갖는다.
'''

a = np.random.rand(5)
print(a) # 결과 : [0.44859207 0.21580016 0.1010523  0.0087913  0.7022354 ]
    
b = np.random.rand(2, 3)
print(b)
'''
결과 : 
    [[0.70633485 0.24791576 0.15788335]
     [0.69769852 0.71995667 0.25774443]]
'''
'''
x, y의 위치, 마커의 색(colors)과 면적(area)을 무작위로 지정.

예를 들어, x는
[0.7000003, 0.721613,... , 0.234654, 0.3216541]으로
0에서 1사이의 무작위한 50개의 값을 갖는다.
'''

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  

'''
scatter()에 x,y 위치를 입력
s 는 마커의 면적을
c 는 마커의 색을 지정
alpha는 마커색의 투명도를 결정
'''
plt.scatter(x,y, s=area,c=colors, alpha=0.5)
plt.show()

'''
matplotlib 히스토그램 그리기
hist()를 이용해서 히스토그램을 그리기

1- 값입력하기
'''

import matplotlib.pyplot as plt
'''weight 리스트는 몸무게 값을 나타낸다.'''
weight = [68,81,64,56,78,74,61,77,66,68,59,
          71,80,59,67,81,69,73,69,74,70,65]
''' hist()함수에 리스트의 형태로 값들을 직접 입력해주면 된다.'''
plt.hist(weight)

2- 여러개의 히스토그램 그리기

import matplotlib.pyplot as plt
import numpy as np
'''
Numpy의 np.random.randn()와
np.random.standard_normal(), np.random.rand() 함수를 이용해서
임의의 값들을 생성
'''
# array a는 표준편차 2.0, 평균 1.0을 갖는 정규분포
a = 2.0 * np.random.randn(10000) + 1.0

# array b 는 표준정규분포를 따른다.
b = np.random.standard_normal(10000)

# array c는 -10.0 에서 10.0 사이의 균일한 분포를 갖는 5000개의 임의의 값.
c = 20.0*np.random.rand(5000) - 10.0

'''
세 개의 분포를 동시에 그래프에 나타내기.
plt.hist()

bins는 몇 개의 영역으로 쪼갤지를 설정.

density=True 로 설정해주면,
밀도함수가 되어서 막대의 아래 면적이 1이 된다.

alpha는 투명도를 의미합니다. 0.0에서 1.0사이의 값을 갖는다.
histtype 을 'step'으로 설정하면 막대 내부가 비어있고,
'stepfilled'로 설정하면 막대 내부가 채워진다.
'''
plt.hist(a, bins=100, density=True, alpha=0.7, histtype='step')
plt.hist(a, bins=50, density=True, alpha=0.5, histtype='stepfilled')
plt.hist(a, bins=100, density=True, alpha=0.9, histtype='step')

plt.show()

import matplotlib.pyplot as plt
import numpy as np

a = np.random.rand(1000)
b = np.random.rand(10000)
c = np.random.rand(100000)

plt.hist(a, bins=100, density=True, alpha=0.5, histtype='step', label='n=1000')
plt.hist(b, bins=100, density=True, alpha=0.75, histtype='step', label='n=10000')
plt.hist(c, bins=100, density=True, alpha=1.0, histtype='step', label='n=100000')
plt.legend()

#----------정수반환
import matplotlib.pyplot as plt
import numpy as np

''' a는 [0,10) 범위의 임의의 정수 1000개'''
a = np.random.randint(0, 10, 1000)
''' b는 [0,10) 범위의 임의의 정수 1000개'''
b = np.random.randint(10, 20, 1000)
''' c는 [0,10) 범위의 임의의 정수 1000개'''
c = np.random.randint(0, 20, 1000)

plt.hist(a, bins=100, density=False, alpha=0.5, histtype='step', label='0<=randint<10')
plt.hist(b, bins=100, density=False, alpha=0.75, histtype='step', label='10<=randint<20')
plt.hist(c, bins=100, density=False, alpha=1.0, histtype='step', label='0<=randint<20')
plt.legend()
plt.show()

 

# -*- coding: utf-8 -*-
"""
Created on Wed Apr 22 15:18:46 2020

@author: admin
"""


# Matplotlib 3차원 산점도 그리기
'''
scatter() 를 이용해서 3차원 산점도(3D Scatter plot)를 그리기.

3차원 그래프를 그리기 위해서
from mpl_toolkits.mplot3d import Axes3D 를 추가.

이 부분은 matplotlib 3.1.0 버전부터는
디폴트로 포함되기 때문에 적어주지 않아도 된다.
'''

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

'''
x, y의 위치, 마커의 색(colors)과 면적(area) 을 무작위로 지정.
'''
n = 100
xmin, xmax, ymin, ymax, zmin, zmax = 0, 20, 0, 20, 0, 50
cmin, cmax = 0, 2

xs = (xmax-xmin)*np.random.rand(n) + xmin
ys = (xmax-xmin)*np.random.rand(n) + ymin
zs = (xmax-xmin)*np.random.rand(n) + zmin
color = (xmax - xmin) * np.random.rand(n) + cmin


# rcParams 를 이용해서 figure의 사이즈를 설정
plt.rcParams["figure.figsize"] = (6,6) # 3차원 박스를 6분할로 나눈다.(가로, 세로)
fig = plt.figure()

'''
3D axes를 만들기 위해
add_subplot() 에 projection= '3d'키워드를 입력
'''
ax = fig.add_subplot(111, projection='3d')

'''
scatter() 함수에 x, y, z위치를 array의 형태로 입력
마커(marker)의 형태를 원형(circle)으로 설정
cmap = 'Greens'를 통해 colormap을 녹색 계열로 설정
'''

ax.scatter(xs, ys, zs, c=color, marker='o', s=15, cmap='Greens')

### Googletrans 기본 사용 ###
'''
Googletrans 라이브러리를 이용해서
간단한 문장을 특정 언어로 (구글) 번역하고, 언어를 자동 감지하는 기능을 사용.
'''

# 1. 번역하기
# googletrans에서 Translator를 불러오기

from googletrans import Translator

translator = Translator()

# translate() 에 번역할 문장을 입력해주면, 아래 같은 결과를 출력.
print(translator.translate('안녕하세요'))

### Googletrans - 파이썬을 위한 구글 번역 API ###
'''
Googletrans는
구글 번역 API(Google Translate API)를 구현한 파이썬 라이브러리.

파이썬과 Googletrans 를 이용해서
무료로 그리고 무제한으로 구글의 번역 기능을 사용할 수 있다.
'''

# Googletrans 설치
'''
pip install googletrans
conda install -c conda-forge googletrans
명령 프롬프트에서 pip 또는 conda를 통해서 설치를 진행
'''

### Googletrans 기본 사용 ###
'''
Googletrans 라이브러리를 이용해서
간단한 문장을 특정 언어로 (구글) 번역하고, 언어를 자동 감지하는 기능을 사용.
'''

# 1. 번역하기
# googletrans에서 Translator를 불러오기

from googletrans import Translator

translator = Translator()

# translate() 에 번역할 문장을 입력해주면, 아래 같은 결과를 출력.
print(translator.translate('안녕하세요'))
# 결과 : Translated(src=ko, dest=en, text=Hi, pronunciation=None, extra_data="{'translat...")
# 기본값인 영어로 번역되고(dest=en) 그 값은 Hi 이다(text=Hi)
print(translator.translate('안녕하세요').text)
# 이 함수가 가지고 있는 속성인 text 만 가지고 나와서 'Hi'를 출력한다.

'''
LANGUAGES = {    'af': 'afrikaans',    'sq': 'albanian',    'am': 'amharic',
             'ar': 'arabic',    'hy': 'armenian',    'az': 'azerbaijani',
             'eu': 'basque',    'be': 'belarusian',    'bn': 'bengali',
             'bs': 'bosnian',    'bg': 'bulgarian',    'ca': 'catalan',
             'ceb': 'cebuano',    'ny': 'chichewa',    'zh-cn': 'chinese (simplified)',
             'zh-tw': 'chinese (traditional)',    'co': 'corsican',    'hr': 'croatian',
             'cs': 'czech',    'da': 'danish',    'nl': 'dutch',    'en': 'english',
             'eo': 'esperanto',    'et': 'estonian',    'tl': 'filipino',
             'fi': 'finnish',    'fr': 'french',    'fy': 'frisian',    'gl': 'galician',
             'ka': 'georgian',    'de': 'german',    'el': 'greek',    'gu': 'gujarati',
             'ht': 'haitian creole',    'ha': 'hausa',    'haw': 'hawaiian',    'iw': 'hebrew',
             'hi': 'hindi',    'hmn': 'hmong',    'hu': 'hungarian',    'is': 'icelandic',
             'ig': 'igbo',    'id': 'indonesian',    'ga': 'irish',    'it': 'italian',
             'ja': 'japanese',    'jw': 'javanese',    'kn': 'kannada',    'kk': 'kazakh',
             'km': 'khmer',    'ko': 'korean',    'ku': 'kurdish (kurmanji)',    'ky': 'kyrgyz',
             'lo': 'lao',    'la': 'latin',    'lv': 'latvian',    'lt': 'lithuanian',
             'lb': 'luxembourgish',    'mk': 'macedonian',    'mg': 'malagasy',    'ms': 'malay',
             'ml': 'malayalam',    'mt': 'maltese',    'mi': 'maori',    'mr': 'marathi',
             'mn': 'mongolian',    'my': 'myanmar (burmese)',    'ne': 'nepali',    'no': 'norwegian',
             'ps': 'pashto',    'fa': 'persian',    'pl': 'polish',    'pt': 'portuguese',
             'pa': 'punjabi',    'ro': 'romanian',    'ru': 'russian',    'sm': 'samoan',
             'gd': 'scots gaelic',    'sr': 'serbian',    'st': 'sesotho',    'sn': 'shona',
             'sd': 'sindhi',    'si': 'sinhala',    'sk': 'slovak',    'sl': 'slovenian', 
             'so': 'somali',    'es': 'spanish',    'su': 'sundanese',    'sw': 'swahili',
             'sv': 'swedish',    'tg': 'tajik',    'ta': 'tamil',    'te': 'telugu',    'th': 'thai',
             'tr': 'turkish',    'uk': 'ukrainian',    'ur': 'urdu',    'uz': 'uzbek',
             'vi': 'vietnamese',    'cy': 'welsh',    'xh': 'xhosa',    'yi': 'yiddish',
             'yo': 'yoruba',    'zu': 'zulu',    'fil': 'Filipino',    'he': 'Hebrew'}
'''

+ Recent posts