天天看點

第1次感興趣的開發子產品:(共6個)半年後期望做成的小項目:外賣比價平台

第1次感興趣的開發子產品:(共6個)半年後期望做成的小項目:外賣比價平台

感興趣的開發子產品:(共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 指向資料記憶體,包含實際數組元素

主要功能

建立數組:

  1. 通過list或元組建立ndarray,元素類型可以由給定的資料自動推導出來,也可以由設計者給定。
  2. 調用zeros/ ones/ empty/ zeros_like/ones_like/ eye等函數生成
  3. 調用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.]
           

半年後期望做成的小項目:外賣比價平台

背景

  1. 社畜與高校學生黨,不管是在家還是在校還是在工作,上班的勞累與食堂菜色的單一,都導緻對外賣的需求不減反增。
  2. 普通人沒有時間各個平台比價,進而專注一個平台,容易被外賣平台使用算法殺熟。(比如是否是會員、是否短期内下過單、顧客的手機型号等)

場景描述

  • 訂外賣的話,我更傾向于做成app,會更友善大多數人群随時随地使用。
  • 該app中包含各大外賣平台(美團、餓了麼、到家美食會等)的商品。
  • 展示方式
    • 若某家店鋪隻使用一家外賣平台,那麼app将直接展示。
    • 若某家店鋪不止使用一家外賣平台,則展示同一商品的各個平台價格對比。

功能描述

  • 下單
    • 使用者選擇下單位址。
    • 使用者搜尋需要下單的商品。
    • 搜尋的結果頁面将展示包含該商品的所有店鋪(由近及遠 and 根據客戶下單次數等 形成相應的排序算法)。
    • 點進某一店鋪後,選擇需要的商品,可以看到不同平台的商品價格、優惠情況、即時的配送費、打包費等。
    • 也可查詢某一商品的30天/60天的曆史價格變化曲線。
    • 使用者選好之後,點選下單按鈕,背景即可在相應的外賣平台下單,使用者付款。
  • 收藏
    • 針對使用者喜愛的商品 or 被他人種草且還未拔草的商品,可納入收藏夾。
    • 當這些商品通過一些可取的優惠進而達到曆史最低價格時,提醒使用者下單。
  • 爆料
    • 當使用者有時自己使用外賣平台通過領取比較特殊的優惠券,but 此時app的比價算法無法覆寫到時。
    • 使用者可以選擇爆料,把怎麼領取優惠券的方式通過文字/截圖,清晰地表述出來。
    • app客服人員稽核通過後,可獎勵爆料者适當獎勵金,獎勵金可以在外賣付款時直接抵用。