0. Python特性
0.1 Python中的包既绕、模塊以及import時(shí)注意事項(xiàng)
包:包含init文件的文件夾
模塊:包文件夾下的.py文件
import:
引入包中模塊:import packname.modulename
引入多個(gè)模塊中多個(gè)變量:from modulename import (a, b, …)
0.2 Python37特性 轉(zhuǎn)自https://www.cnblogs.com/Li-JT/p/15376165.html
Python 3.7版本巷懈,函數(shù)的參數(shù)可以通過(guò)冒號(hào)來(lái)進(jìn)行注釋
def f(ham: str, eggs: str = 'eggs') -> str :
print("Annotations:", f.__annotations__)
print("Arguments:", ham, eggs)
return ham + ' and ' + eggs
代碼中 str 都是注釋骗露,不是強(qiáng)制確定的類型(Python是動(dòng)態(tài)類型的)
冒號(hào)后表示參數(shù)的注釋幔戏,如果需要默認(rèn)賦值再在后面加等號(hào)即可。
箭頭后表示返回值的注釋翩剪。
1. 畫(huà)圖表
利用matplotlib庫(kù)
1)折線圖
import matplotlib.pyplot as plt
# 繪制折線圖
# plt.plot(x, y, format_string) 此處 'b':藍(lán)色刹淌,'-.':點(diǎn)劃線,'o':實(shí)心圈標(biāo)記
plt.plot([i-10 for i in range(20)], [i for i in range(20)], 'b-.o', label='blue')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Demo')
# 設(shè)置左上角線條指示
plt.legend()
# savefig()要放到show()之前才有結(jié)果
# 直接加后綴就可以存為png, jpg, svg...
plt.savefig('demo.png')
plt.show()
2)并列柱狀圖
import numpy as np
import matplotlib.pyplot as plt
size = 5
x = np.arange(size)
a = np.random.random(size)
b = np.random.random(size)
c = np.random.random(size)
total_width, n = 0.8, 3 # 三個(gè)柱子總寬
width = total_width / n # 一個(gè)柱子寬
x = x - (total_width - width) / 2 # 第一個(gè)柱子的中心(x坐標(biāo))W
# plt.bar(x,y, width)
plt.bar(x, a, width=width, label='a')
plt.bar(x + width, b, width=width, label='b')
plt.bar(x + 2 * width, c, width=width, label='c')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
2. time庫(kù)當(dāng)前時(shí)間打印
import time
print(time.time()) # 當(dāng)前時(shí)間 浮點(diǎn)數(shù)時(shí)間戳
print(time.localtime()) # 當(dāng)前時(shí)間 時(shí)間元組
tuple_time = time.localtime(time.time()) # 當(dāng)前時(shí)間 時(shí)間戳==>時(shí)間元組
print(tuple_time)
format_time = time.strftime("%Y-%m-%d %H:%M:%S", tuple_time) # 當(dāng)前時(shí)間 時(shí)間元組==>格式化時(shí)間
print(format_time)
print(time.strptime(format_time,"%Y-%m-%d %H:%M:%S"))
print(time.mktime(tuple_time)) # 當(dāng)前時(shí)間 時(shí)間元組==>時(shí)間戳
結(jié)果:
1638512797.5577352
time.struct_time(tm_year=2021, tm_mon=12, tm_mday=3, tm_hour=14, tm_min=26, tm_sec=37, tm_wday=4, tm_yday=337, tm_isdst=0)
time.struct_time(tm_year=2021, tm_mon=12, tm_mday=3, tm_hour=14, tm_min=26, tm_sec=37, tm_wday=4, tm_yday=337, tm_isdst=0)
2021-12-03 14:26:37
time.struct_time(tm_year=2021, tm_mon=12, tm_mday=3, tm_hour=14, tm_min=26, tm_sec=37, tm_wday=4, tm_yday=337, tm_isdst=-1)
1638512797.0
3. np.random模塊
import numpy as np
# np.random.randint()生成隨機(jī)整數(shù)
print(np.random.randint(10)) # [0, 10)-->7
print(np.random.randint(10,20)) # [10, 20)-->11
print(np.random.randint(10, size=10)) # [1 4 9 9 2 3 1 9 7 1]
print(np.random.randint(10, size=(2,3))) # [[4 0 7]
# [8 4 0]]
# np.random.randn()從標(biāo)準(zhǔn)正態(tài)分布中生成隨機(jī)浮點(diǎn)數(shù)
print(np.random.randn(2,4)) # [[-2.54856518 -0.12214179 -1.87864935 0.43161977]
# [ 0.44264148 0.64066884 2.63730482 -0.89815009]]
print(np.random.normal(0, 1, size=5)) # 從均值為0芹橡,方差為1的正態(tài)分布(標(biāo)準(zhǔn)正態(tài))中隨機(jī)
# [ 0.68093563 -0.50425498 -1.22208785 -1.3887711 0.89877655]
# np.random.rand()從(0,1)中生成隨機(jī)浮點(diǎn)數(shù)
print(np.random.rand(2,4)) # [[0.4488376 0.76863046 0.32946063 0.31675537]
# [0.77070435 0.12285917 0.96088168 0.04157771]]
print(np.random.random((2,4))) # 和rand一樣的效果
4. collections庫(kù)使用
- collections.counter是對(duì)dict的擴(kuò)展毒坛,用于計(jì)數(shù)
import collections
# 對(duì)dict的擴(kuò)展,用于計(jì)數(shù)
counter = collections.Counter("which") # 也可以傳入list: ['w', 'h', 'i', 'c', 'h']
# 訪問(wèn)是與dict類似
for key, val in counter.items():
print(key, val)
# 自動(dòng)更新技術(shù)
counter.update("hhh")
for key, val in counter.items():
print(key, val)
# 輸出最常出現(xiàn)的k個(gè)元素,list形式
print("most_common: %s" % counter.most_common(1))
輸出:
w 1
h 2
i 1
c 1
------
w 1
h 5
i 1
c 1
------
most_common: [('h', 5)]
- collections.defaultdict
defaultdict會(huì)為不存在的鍵先初始化它的默認(rèn)值(指定類型)
import collections
bag = ['a', 'o', 'c', 'a', 'a', 'c', 'b']
# 普通的dict()在第一次訪問(wèn)a的時(shí)候因?yàn)闆](méi)有這個(gè)鍵會(huì)KeyError
# defaultdict相當(dāng)于先用int來(lái)初始化值
# int: 0, str: 空串, list: [], set: set()
count = collections.defaultdict(int)
for fruit in bag:
count[fruit] += 1
輸出:
defaultdict(<class 'int'>, {'a': 3, 'o': 1, 'c': 2, 'b': 1})
5. 正則表達(dá)式re庫(kù)
對(duì)于* . ? + $ ^ [ ] ( ) { } | \ / 如果要匹配它們需要額外轉(zhuǎn)義(注:只是英文的這些符號(hào)需要煎殷,中文的不需要)屯伞。
如 \\( 匹配 ( ,之所以要兩次反斜杠是因?yàn)楹乐保淮芜^(guò)正則引擎劣摇,一次過(guò)python引擎。
當(dāng)正則中沒(méi)有()時(shí)候, group()方法也可以取整體匹配結(jié)果顶伞,同group(0)饵撑,有()時(shí)候索引號(hào)代表第幾個(gè)元組匹配內(nèi)容
正則語(yǔ)法 | 備注 |
---|---|
[ ] | [ ]中的只以u(píng)nigram匹配,每個(gè)字符之間是或關(guān)系唆貌,如:[az]匹配a或z滑潘,[\u4E00-\u9FA5]匹配漢字 |
| | 整個(gè)表達(dá)式首先以 | 劃分成若干個(gè)或關(guān)系,每個(gè)子表達(dá)式長(zhǎng)度>1也無(wú)須加括號(hào)锨咙,如:"好聽(tīng)|棒"匹配“好聽(tīng)”或者“棒” |
( ) | 分組语卤,對(duì)match對(duì)象用group(index)方法訪問(wèn)第index個(gè)()匹配內(nèi)容 |
import re
# re.match()只從字符串開(kāi)頭匹配,較少使用
# re.search()只匹配第一次出現(xiàn)酪刀,常用于查找有無(wú)某一類pattern
a = re.search("(棒|好聽(tīng)|好哇)[了!的]+", line)
if a: # 可以匹配:棒了粹舵,好聽(tīng)!!! 等等
print(a)
# 查找所有出現(xiàn)的模式
content = 'Hello, I am Jerry, from Chongqing, a montain city, nice to meet you……'
pattern = re.compile('\w*o\w*')
x = pattern.findall(content) # 返回list: ['Hello', 'from', ...]
# re.sub() 比 str.replace()要好用很多,主要在1.可以正則匹配骂倘;2.可以函數(shù)替換
s = 'B83C72D1D8E67'
def convert(value):
# value是多個(gè)match對(duì)象, value.group()獲取一次匹配值, value.span()獲取起始位置元組(左開(kāi)右閉)
# 當(dāng)正則中沒(méi)有()時(shí)候, group()方法也可以取整體匹配結(jié)果眼滤,同group(0),有()時(shí)候索引號(hào)代表第幾個(gè)元組匹配內(nèi)容
num = int(value.group())
if num > 9: # 將兩位數(shù)的數(shù)字都/10返回
return str(int(num/10))
else:
return str(int(num/10))
s = re.sub('\d{1,2}', convert, s) # 相當(dāng)于多次調(diào)用match函數(shù)
# s前: B83C72D1D8E67
# s后: B8C7D0D0E6
6. 簡(jiǎn)單爬取并解析頁(yè)面
用requests爬取历涝,用bs4解析诅需,CSS選擇器select
import requests
from bs4 import BeautifulSoup
def get_html(url): #爬取源碼函數(shù)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"
} # 模擬瀏覽器訪問(wèn)
response = requests.get(url, headers=headers) # 請(qǐng)求訪問(wèn)網(wǎng)站
response.encoding = response.apparent_encoding #設(shè)置字符編碼格式
html = response.text # 獲取網(wǎng)頁(yè)源碼
return html # 返回網(wǎng)頁(yè)源碼
r = get_html("https://www.baidu.com")
soup = BeautifulSoup("<p class='button'>你好</p><p class='button'>你不好</p>", \
'lxml') # 設(shè)置lxml解析器
tag_soup = soup.select('.button') # 返回list,包括所有匹配的標(biāo)簽及內(nèi)容
# 同 soup.select('p[class="button"]')
for tag in tag_soup:
print(tag.text) # 你好 你不好
7. TF-IDF庫(kù)使用
轉(zhuǎn)自https://blog.csdn.net/weixin_44285715/article/details/105930874
import numpy as np
corpus = np.array(['The sun is shining',
'The weather is sweet',
'The sun is shining and the weather is sweet'])
from sklearn.feature_extraction.text import CountVectorizer
count = CountVectorizer() # 輸入list語(yǔ)料荧库,輸出每個(gè)單詞的詞頻TF
tf=count.fit_transform(corpus)
# 查看詞頻輸出
tf.toarray()
# array([[0, 1, 1, 1, 0, 1, 0],
# [0, 1, 0, 0, 1, 1, 1],
# [1, 2, 1, 1, 1, 2, 1]], dtype=int64)
# 查看詞匯表
count.vocabulary_
# {'the': 5, 'sun': 3, 'is': 1, 'shining': 2, 'weather': 6, 'sweet': 4, 'and': 0}
# 'the':5 表示'the'這個(gè)單詞的詞頻顯示在詞頻向量中的第6位
# 第一個(gè)向量中為1堰塌,第二個(gè)向量中為 1,第三個(gè)向量中為 2分衫,分別表示'the'這個(gè)單詞在第一個(gè)文檔中出現(xiàn) 1 次场刑,在第二個(gè)文檔中出現(xiàn) 1 次,在第三個(gè)文檔中出現(xiàn) 2 次
from sklearn.feature_extraction.text import TfidfTransformer
tfidf = TfidfTransformer() # 將詞頻TF作為輸入牵现,得到TF-IDF值
tf_idf=tfidf.fit_transform(tf)
# 查看詞頻逆反文檔頻率輸出
tf_idf.toarray()
# array([[0. , 0.43, 0.56, 0.56, 0. , 0.43, 0. ],
# [0. , 0.43, 0. , 0. , 0.56, 0.43, 0.56],
# [0.4 , 0.48, 0.31, 0.31, 0.31, 0.48, 0.31]])
或者把兩步并為一步:
TfidfVectorizer().fit_transform(corpus) = TfidfTransformer().fit_transform(CountVectorizer().fit_transform(corpus))
from sklearn.feature_extraction.text import TfidfVectorizer
countfidf = TfidfVectorizer()
count_tfidf = countfidf.fit_transform(corpus)
# 查看輸出
count_tfidf.toarray()
# array([[0. , 0.43, 0.56, 0.56, 0. , 0.43, 0. ],
# [0. , 0.43, 0. , 0. , 0.56, 0.43, 0.56],
# [0.4 , 0.48, 0.31, 0.31, 0.31, 0.48, 0.31]])
注意:使用中文文本時(shí)list中需要事先以空格隔開(kāi)分詞施籍,否則模塊不會(huì)分詞丑慎。
如果對(duì)中文句子list(sentences)在CountVectorizer()中會(huì)默認(rèn)會(huì)過(guò)濾掉長(zhǎng)度為1的字符竿裂,需要修改參數(shù)token_pattern