Python操作

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()
demo.png

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()
image.png

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ù)使用

  1. 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)]
  1. 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市进副,隨后出現(xiàn)的幾起案子影斑,更是在濱河造成了極大的恐慌机打,老刑警劉巖残邀,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驱闷,死亡現(xiàn)場(chǎng)離奇詭異空免,居然都是意外死亡蹋砚,警方通過(guò)查閱死者的電腦和手機(jī)都弹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門畅厢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)框杜,“玉大人袖肥,你說(shuō)我怎么就攤上這事∮涂瘢” “怎么了专筷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵吮旅,是天一觀的道長(zhǎng)庇勃。 經(jīng)常有香客問(wèn)我槽驶,道長(zhǎng)捺檬,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮烤镐,結(jié)果婚禮上炮叶,老公的妹妹穿的比我還像新娘。我一直安慰自己祟辟,他們只是感情好旧困,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布吼具。 她就那樣靜靜地躺著拗盒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陡蝇。 梳的紋絲不亂的頭發(fā)上登夫,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天悼嫉,我揣著相機(jī)與錄音蹋凝,去河邊找鬼鳍寂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛迄汛,可吹牛的內(nèi)容都是我干的鞍爱。 我是一名探鬼主播睹逃,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼翼闹!你這毒婦竟也來(lái)了猎荠?” 一聲冷哼從身側(cè)響起颠锉,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎停撞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體艰猬,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冠桃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年命贴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片食听。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胸蛛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出樱报,到底是詐尸還是另有隱情,我是刑警寧澤迹蛤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布嚷量,位于F島的核電站,受9級(jí)特大地震影響身坐,放射性物質(zhì)發(fā)生泄漏部蛇。R本人自食惡果不足惜涯鲁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一警绩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贡避,春花似錦皇筛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至姑曙,卻和暖如春焕梅,著一層夾襖步出監(jiān)牢的瞬間该窗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留边酒,地道東北人氓涣。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓蠢古,卻偏偏與公主長(zhǎng)得像脊框,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诵棵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容