感興趣的開發子產品:(共6個)
1. Requests
Requests庫中有7個主要的函數
分别是 request() 、get() 、 head() 、post() 、put() 、patch() 、delete() 。這七個函數中request()函數是其餘六個函數的基礎函數,其餘六個函數的實作都是通過調用該函數實作的。
方法說明
- requests.request() 構造一個請求,支撐一下方法的基礎方法
- requests.get() 擷取HTML網頁的主要方法,對應于HTTP的GET(請求URL位置的資源)
- requests.head() 擷取HTML網頁頭資訊的方法,對應于HTTP的HEAD(請求URL位置的資源的頭部資訊)
- requests.post() 向HTML網頁送出POST請求的方法,對應于HTTP的POST(請求向URL位置的資源附加新的資料)
- requests.put() 向HTML網頁送出PUT請求的方法,對應于HTTP的PUT(請求向URL位置儲存一個資源,覆寫原來URL位置的資源)
- requests.patch() 向HTML網頁送出局部修改的請求,對應于HTTP的PATCH(請求局部更新URL位置的資源)
- requests.delete() 向HTML網頁送出删除請求,對應于HTTP的DELETE(請求删除URL位置儲存的資源)
而這幾個函數中,最常用的又是 requests.get() 函數。get函數有很多的參數,我隻舉幾個比較常用的參數
參數說明
- url 就是網站的url
- params 将字典或位元組序列,作為參數添加到url中,get形式的參數
- data 将字典或位元組序列,作為參數添加到url中,post形式的參數
- headers 請求頭,可以修改User-Agent等參數
- timeout 逾時時間
- proxies 設定代理
2. Pandas
一般寫法
import pandas as pd
主要特點
- 使用預設和自定義索引的快速高效的DataFrame對象。
- 用于将資料從不同檔案格式加載到記憶體資料對象的工具。
- 資料對齊和缺失資料的內建處理。
- 重新設定和旋轉日期集。
- 大資料集的基于标簽的分片,索引和子集。
- 資料結構中的列可以被删除或插入。
- 按資料分組進行聚合和轉換。
- 高性能的資料合并和連接配接。
- 時間序列功能。
主要功能
導入資料
- pd.read_csv(filename):從CSV檔案導入資料
- pd.read_table(filename):從限定分隔符的文本檔案導入資料
- pd.read_excel(filename):從Excel檔案導入資料
- pd.read_sql(query, connection_object):從SQL表/庫導入資料
- pd.read_json(json_string):從JSON格式的字元串導入資料
- pd.read_html(url):解析URL、字元串或者HTML檔案,抽取其中的tables表格
- pd.read_clipboard():從你的粘貼闆擷取内容,并傳給read_table()
- pd.DataFrame(dict):從字典對象導入資料,Key是列名,Value是資料
導出資料
- df.to_csv(filename):導出資料到CSV檔案
- df.to_excel(filename):導出資料到Excel檔案
- df.to_sql(table_name, connection_object):導出資料到SQL表
- df.to_json(filename):以Json格式導出資料到文本檔案
建立測試對象
- pd.DataFrame(np.random.rand(20,5)):建立20行5列的随機數組成的DataFrame對象
- pd.Series(my_list):從可疊代對象my_list建立一個Series對象
- df.index = pd.date_range(‘1900/1/30’, periods=df.shape[0]):增加一個日期索引
檢視、檢查資料
- df.head(n):檢視DataFrame對象的前n行
- df.tail(n):檢視DataFrame對象的最後n行
- df.shape():檢視行數和列數
- df.info():檢視索引、資料類型和記憶體資訊
- df.describe():檢視數值型列的彙總統計
- s.value_counts(dropna=False):檢視Series對象的唯一值和計數
- df.apply(pd.Series.value_counts):檢視DataFrame對象中每一列的唯一值和計數
資料選取
- df[col]:根據列名,并以Series的形式傳回列
- df[[col1, col2]]:以DataFrame形式傳回多列
- s.iloc[0]:按位置選取資料
- s.loc[‘index_one’]:按索引選取資料
- df.iloc[0,:]:傳回第一行
- df.iloc[0,0]:傳回第一列的第一個元素
資料清理
- df.columns = [‘a’,’b’,’c’]:重命名列名
- pd.isnull():檢查DataFrame對象中的空值,并傳回一個Boolean數組
- pd.notnull():檢查DataFrame對象中的非空值,并傳回一個Boolean數組
- df.dropna():删除所有包含空值的行
- df.dropna(axis=1):删除所有包含空值的列
- df.dropna(axis=1,thresh=n):删除所有小于n個非空值的行
- df.fillna(x):用x替換DataFrame對象中所有的空值
- s.astype(float):将Series中的資料類型更改為float類型
- s.replace(1,’one’):用‘one’代替所有等于1的值
- s.replace([1,3],[‘one’,’three’]):用’one’代替1,用’three’代替3
- df.rename(columns=lambda x: x + 1):批量更改列名
- df.rename(columns={‘old_name’: ‘new_ name’}):選擇性更改列名
- df.set_index(‘column_one’):更改索引列
- df.rename(index=lambda x: x + 1):批量重命名索引
資料處理:Filter、Sort和GroupBy
- df[df[col] > 0.5]:選擇col列的值大于0.5的行
- df.sort_values(col1):按照列col1排序資料,預設升序排列
- df.sort_values(col2, ascending=False):按照列col1降序排列資料
- df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,後按col2降序排列資料
- df.groupby(col):傳回一個按列col進行分組的Groupby對象
- df.groupby([col1,col2]):傳回一個按多列進行分組的Groupby對象
- df.groupby(col1)[col2]:傳回按列col1進行分組後,列col2的均值
- df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):建立一個按列col1進行分組,并計算col2和col3的最大值的資料透視表
- df.groupby(col1).agg(np.mean):傳回按列col1分組的所有列的均值
- data.apply(np.mean):對DataFrame中的每一列應用函數np.mean
- data.apply(np.max,axis=1):對DataFrame中的每一行應用函數np.max
資料合并
- df1.append(df2):将df2中的行添加到df1的尾部
- df.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部
- df1.join(df2,on=col1,how=’inner’):對df1的列和df2的列執行SQL形式的join
資料統計
- df.describe():檢視資料值列的彙總統計
- df.mean():傳回所有列的均值
- df.corr():傳回列與列之間的相關系數
- df.count():傳回每一列中的非空值的個數
- df.max():傳回每一列的最大值
- df.min():傳回每一列的最小值
- df.median():傳回每一列的中位數
- df.std():傳回每一列的标準差
3.NumPy
numpy的主要對象是同種元素的多元數組,所有的元素都必須是一種類型,可通過一個正整數元組索引的元素表格。在numpy中次元稱為軸(axes),軸的個數叫做秩(rank)。Numpy的數組類型narray,其常用對象屬性:
- ndarray.dim 數組軸的個數
- ndarray.shape 數組的次元
- ndarray.size 數組元素的個數
- ndarray.dtype 數組元素類型
- ndarray.itemsize 數組每個元素的位元組大小
- ndarray.data 指向資料記憶體,包含實際數組元素
主要功能
建立數組:
- 通過list或元組建立ndarray,元素類型可以由給定的資料自動推導出來,也可以由設計者給定。
- 調用zeros/ ones/ empty/ zeros_like/ones_like/ eye等函數生成
- 調用arange/ linspace也可生成
列印數組:
使用print即可,如 a = np.arange(9).reshape(3,3),再調用print(a)即可将數組a顯示出來。
基本運算:
1.數組的算術運算是按元素進行的。
設a = np.array([2,3]),b=np.array(7,8)
加法:c = a + b, 則c為 array([9,11])
加法:c = b - a, 則c為 array([5,5])
乘法:c = a * b, 則c為 array([14,24])
二次方:c = a ** 2,則c為array([4, 9])
當兩個數組元素的類型不同時,其會進行類型轉換,往更精确的方向轉換,比如int和float相加,得到的結果為float
2.矩陣乘法 dot函數
索引:
- 可通過arr[a, b], arr[:,b],arr[a, :],arr[m:n, b],arr[a, m:n],arr[m:n, p:q]等多種形式進行通路某個位置的元素、行或列。
- arr[-1]表示通路最後一行
for row in arr: //表示按行通路arr print row
- 若想通路每個數組中元素,可以使用flat屬性,如
for element in b.flat: print element
組合不同的數組:
可以沿不同軸将數組堆疊在一起:
- Column_stack: 以列将一維數組組合成二維數組
- Row_stack:以行将一維數組組合成二維數組
- Hstack:水準方向堆疊
- Vstack:垂直方向堆疊
- Concatenate:允許可選參數給出組合時沿着的軸
将數組分割:
- Hsplit:水準分割
- Vsplit:垂直分割
- Array_split:指定沿哪個軸分割
深拷貝與淺拷貝:
a= np.array([1,2,3]);
b= a; #淺拷貝,即b與a指向同一個空間, b is a = true
c= a.copy() #深拷貝,把a的内容複制給了c,不指向同一空間, c isa = false
d = a.view() #淺複制,d與a指向同一資料空間,但是此時建立了新的對象,d is a=false
mat函數:
mat函數将目标資料類型轉換為矩陣(matrix)
matrix對象是繼承ndarray而來,是以其和ndarray有相同的屬性和方法,但它們之間有六個重要的差別:
- 矩陣對象可以使用字元串符号建立,以允許matlab風格文法
- 矩陣對象總是二維的
- 矩陣對象乘法就是矩陣乘法
- Matrix objects over-ridepower to be matrix raised to a power. The same warning about using power insidea function that uses asanyarray(…) to get an array object holds for this fact.(這個沒太懂)
- 矩陣對象的預設優先級__array_priority__是10.0,是以與ndarrays的混合操作總是産生矩陣
- 矩陣有其特殊屬性,使計算更容易. arr.T矩陣轉置,arr.I矩陣求逆,arr.H矩陣共轭, arr.A将矩陣作為一個ndarray對象傳回
4. Matplotlib
matplotlib庫是什麼
matplotlib是python中常用的一個繪圖庫,他的功能相當于matlab,基本上matlab上能實作的繪圖功能都能夠通過matplotlib庫來在python中進行實作。
matplotlib基礎用法
matplotlib繪圖使用的是其中的pyplot庫,其核心思想包括以下幾個步驟:
- 定一個畫布;
- 在畫布上繪制所需要展示的圖表;
- 展示畫布内容。
一些常用圖表的繪制方法
統計圖表繪制
- 直方圖繪制
- 餅狀圖繪制
散點圖 & 曲線繪制
- 散點圖繪制
- 一般曲線繪制
圖檔屬性設定
- 圖檔大小設定
- 坐标軸設定
- 網格設定
複雜圖表繪制
- 同一張圖中繪制多條曲線
- 以子圖的方式繪制多條曲線
- 同一張圖中設定雙坐标系
- 在大圖中繪制子圖
5.TensorFlow
簡介
- 随着各種圖像識别, 語音識别的記錄被不斷重新整理, 深度學習被證明是一個極具潛力的技術方向. 建構高效, 可靠, 可擴充的基礎工具, 能為這一領域發展起到極大作用.
- Google 退出了一套深度學習系統: TensorFlow. TensorFlow 是目前最優秀的深度學習系統之一:
- 具有靈活的表達能力, 能夠快速實作各種算法
- 高執行能力, 具備分布擴充性
- 跨平台可移植性
- 試驗可複現性
- 支援快速産品化, 模型可随時部署
- TensorFlow 是一個基于資料流圖的數值計算開源庫.
- 面向數值計算 (深度學習, 通用計算機應用) 資料流圖是 TensorFlow 計算的抽象表示. 資料流圖是有向圖, 圖中的各點表示各種數學的計算操作, 邊表示操作與操作之間傳遞的高緯度數值資料, 稱為 tensor. 支援各種裝置的靈活部署, 分布式叢集, 手機移動裝置.
特點
TensorFlow 是一個機遇資料流程式設計的符号數學系統, 被廣泛應用于各類機器學習算法的程式設計實作.
TensorFlow 的特點:
- 多平台支援, 很容易在移動裝置上運作
- 内置了簡單的進階 API, 使用友善
- 支援可視化訓練 (TensorBoard)
- 容易實作生産部署 (TensorFlow Serving)
- 良好的文檔和廣大的社群支援
6. PyTorch
基本用法
輸出版本
import torch
print(torch.__version__)
1.7.0+cpu
建立a矩陣
a = torch.empty(5, 3)
print(a)
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
建立一個随機矩陣
b = torch.rand(5, 3)
print(b)
tensor([[0.7127, 0.1942, 0.3997],
[0.2898, 0.1822, 0.7947],
[0.2400, 0.9720, 0.9462],
[0.3822, 0.0322, 0.7618],
[0.4938, 0.8348, 0.9067]])
建立一個全0矩陣
c = torch.zeros(5, 3, dtype=torch.long)
print(c)
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
直接傳入資料
d = torch.tensor([5.5, 3])
print(d)
tensor([5.5000, 3.0000])
建立一個全1矩陣
e = torch.ones(5, 3, dtype=torch.double)
print(e)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
标準差是1的随機數
f = torch.rand_like(e, dtype=torch.float)
print(f)
tensor([[0.1031, 0.3789, 0.9064],
[0.0158, 0.2760, 0.3095],
[0.1251, 0.3651, 0.4132],
[0.3512, 0.9256, 0.9110],
[0.1770, 0.0112, 0.9681]])
基本計算方法
定義張量
a = torch.zeros([5, 3])
b = torch.ones([5, 3])
加法
c = a + b
d = torch.add(a, b)
print(c)
print(d)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
減法
e = a - b
f = torch.sub(a, b)
print(e)
print(f)
tensor([[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.]])
tensor([[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.],
[-1., -1., -1.]])
索引
print(a[:, 1])
print(b[:, 1])
tensor([0., 0., 0., 0., 0.])
tensor([1., 1., 1., 1., 1.])
操作次元
x = torch.randn(4,4)
y = x.view(16)
z = x.view(-1,8)
print(x.size())
print(y.size())
print(z.size())
torch.Size([4, 4])
torch.Size([16])
torch.Size([2, 8])
與numpy協同操作
import numpy as np
x = torch.ones(5)
y = x.numpy()
print(y)
[1. 1. 1. 1. 1.]
x = np.ones(5)
y = torch.from_numpy(x)
print(x)
[1. 1. 1. 1. 1.]
半年後期望做成的小項目:外賣比價平台
背景
- 社畜與高校學生黨,不管是在家還是在校還是在工作,上班的勞累與食堂菜色的單一,都導緻對外賣的需求不減反增。
- 普通人沒有時間各個平台比價,進而專注一個平台,容易被外賣平台使用算法殺熟。(比如是否是會員、是否短期内下過單、顧客的手機型号等)
場景描述
- 訂外賣的話,我更傾向于做成app,會更友善大多數人群随時随地使用。
- 該app中包含各大外賣平台(美團、餓了麼、到家美食會等)的商品。
- 展示方式
- 若某家店鋪隻使用一家外賣平台,那麼app将直接展示。
- 若某家店鋪不止使用一家外賣平台,則展示同一商品的各個平台價格對比。
功能描述
- 下單
- 使用者選擇下單位址。
- 使用者搜尋需要下單的商品。
- 搜尋的結果頁面将展示包含該商品的所有店鋪(由近及遠 and 根據客戶下單次數等 形成相應的排序算法)。
- 點進某一店鋪後,選擇需要的商品,可以看到不同平台的商品價格、優惠情況、即時的配送費、打包費等。
- 也可查詢某一商品的30天/60天的曆史價格變化曲線。
- 使用者選好之後,點選下單按鈕,背景即可在相應的外賣平台下單,使用者付款。
- 收藏
- 針對使用者喜愛的商品 or 被他人種草且還未拔草的商品,可納入收藏夾。
- 當這些商品通過一些可取的優惠進而達到曆史最低價格時,提醒使用者下單。
- 爆料
- 當使用者有時自己使用外賣平台通過領取比較特殊的優惠券,but 此時app的比價算法無法覆寫到時。
- 使用者可以選擇爆料,把怎麼領取優惠券的方式通過文字/截圖,清晰地表述出來。
- app客服人員稽核通過後,可獎勵爆料者适當獎勵金,獎勵金可以在外賣付款時直接抵用。