第2章威力彩 投影片指令
import requests
from bs4 import BeautifulSoup
url = 'https://www.taiwanlottery.com.tw/'
r = requests.get(url)
sp = BeautifulSoup(r.text, 'lxml')
# 找到威力彩的區塊
datas = sp.find('div', class_='contents_box02')
# 開獎期數
title = datas.find('span', 'font_black15').text
print('威力彩期數:', title)
# 開獎號碼
nums = datas.find_all('div', class_='ball_tx ball_green')
# 開出順序
print('開出順序:', end=' ')
for i in range(0,6):
print(nums[i].text, end=' ')
# 大小順序
print('\n大小順序:', end=' ')
for i in range(6,12):
print(nums[i].text, end=' ')
# 第二區
num = datas.find('div', class_='ball_red').text
print('\n第二區:', num)
from bs4 import BeautifulSoup
url = 'https://www.taiwanlottery.com.tw/'
r = requests.get(url)
sp = BeautifulSoup(r.text, 'lxml')
# 找到威力彩的區塊
datas = sp.find('div', class_='contents_box02')
# 開獎期數
title = datas.find('span', 'font_black15').text
print('威力彩期數:', title)
# 開獎號碼
nums = datas.find_all('div', class_='ball_tx ball_green')
# 開出順序
print('開出順序:', end=' ')
for i in range(0,6):
print(nums[i].text, end=' ')
# 大小順序
print('\n大小順序:', end=' ')
for i in range(6,12):
print(nums[i].text, end=' ')
# 第二區
num = datas.find('div', class_='ball_red').text
print('\n第二區:', num)
1. pandas的DataFrame介紹
2. DataFrame的使用
3. 資料視覺化必懂的Pandas套件繪製Matplotlib分析圖表實戰
read_csv('中文檔名',engine='python',encoding='utf-8')
否則中文檔名會出錯
4. 把資料pandas_dataframe練習用資料.csv讀出來並使用jupyter notebook繪製所有同學成績並解決中文問題TaipeiSansTCBeta-Regular.ttf, 這兩個檔案要與程式放在同一個目錄下
%matplotlib
import pandas as pd
import matplotlib.font_manager as fm
import sys
myfont = fm.FontProperties(fname=r'.\TaipeiSansTCBeta-Regular.ttf')
# 讀入資料集檔案
sys.getdefaultencoding()#‘utf-8’;新增支援中文的編碼
#使用open與encoding='utf-8'可讀取中文檔名
df = pd.read_csv(open('.\pandas_dataframe練習用資料.csv',encoding='utf-8'))
#指定姓名欄當成index欄位, 也就是圖中的X軸
df.set_index('姓名',inplace=True)
print(df)
import matplotlib.pyplot as plt
ax=df.plot(kind='bar', fontsize=5,figsize=(20,4))
plt.legend(prop=myfont)
plt.title('學期成績',fontproperties=myfont)
for label in ax.get_xticklabels():
label.set_fontproperties(myfont)
plt.show()
import pandas as pd
import matplotlib.font_manager as fm
import sys
myfont = fm.FontProperties(fname=r'.\TaipeiSansTCBeta-Regular.ttf')
# 讀入資料集檔案
sys.getdefaultencoding()#‘utf-8’;新增支援中文的編碼
#使用open與encoding='utf-8'可讀取中文檔名
df = pd.read_csv(open('.\pandas_dataframe練習用資料.csv',encoding='utf-8'))
#指定姓名欄當成index欄位, 也就是圖中的X軸
df.set_index('姓名',inplace=True)
print(df)
import matplotlib.pyplot as plt
ax=df.plot(kind='bar', fontsize=5,figsize=(20,4))
plt.legend(prop=myfont)
plt.title('學期成績',fontproperties=myfont)
for label in ax.get_xticklabels():
label.set_fontproperties(myfont)
plt.show()
5. Pandas的資料存取
6. 檔案的讀取寫入
fp=open("test.txt","w",encoding="utf8")
fp.write(r.text)#寫入資料
print("寫入檔案text.txt")
fp.close()
--------
fp=open("test.txt","r",encoding="utf8")
str=fp.read()#讀取資料
print("檔案內容text.txt:")
print(str)
fp.close()
----------
#另外一種讀取資料方法
with open("test.txt", "r", encoding="utf8") as fp:
str=fp.read() #一次讀取全部內容
print(str)
------
#另外一種讀取資料方法2
with open("test.txt", "r", encoding="utf8") as fp:
list1=fp.readlines()#一次讀取所有列
for line in list1:#針對每列以迴圈讀取
print(line, end="")
7. 如果網頁非常格式化, 可利用pandas 抓取 pd.read_html('網址')
---------------
import pandas as pd
url='https://mops.twse.com.tw/server-java/t13sa150_otc?&step=wh&fbclid=IwAR3Y9T5h3v9Du2-aDLXLy3g_-qu1W60UK1yh3D7uF5qZL6JqF8LMslpQDS4'
bus_table = pd.read_html(url,encoding='big5')[0]
bus_table
url='https://mops.twse.com.tw/server-java/t13sa150_otc?&step=wh&fbclid=IwAR3Y9T5h3v9Du2-aDLXLy3g_-qu1W60UK1yh3D7uF5qZL6JqF8LMslpQDS4'
bus_table = pd.read_html(url,encoding='big5')[0]
bus_table
#讀取統聯客運三排座票價 https://www.ubus.com.tw/Booking/FareInquiry
import pandas as pd
bus_table = pd.read_html("https://www.ubus.com.tw/Booking/FareInquiry")
bus_df = bus_table[0] #讀取第一個表格國道路線
print(bus_df)
bus_table = pd.read_html("https://www.ubus.com.tw/Booking/FareInquiry")
bus_df = bus_table[0] #讀取第一個表格國道路線
print(bus_df)
-------------
#如果要將pandas的dataframe(類似excel表格)資料存成csv, 可以使用dataframe.to_csv(), 最好使用with可以自動關閉檔案, 加上encoding='utf-8-sig'可以解決中文亂碼問題。
with open("thefile.csv", "w",encoding='utf-8-sig') as f:
bus_df.to_csv(f)
bus_df.to_csv(f)