一、numpy
numpy是python數據分析和機器學習的基礎模塊之一。它有兩個作用:1.區別於list列表,提供了數組操作、數組運算、以及統計分布和簡單的數學模型;2.計算速度快[甚至要由於python內置的簡單運算],使得其成為pandas、sklearn等模塊的依賴包。高級的框架如TensorFlow、PyTorch等,其數組操作也和numpy非常相似。
1、隨機數生成
常用的生成隨機數的幾個函數:

li = list(range(10)) print(li, type(li)) li = np.array(li) print(li, type(li)) li = li.tolist() # list(li)也可以 print(li, type(li))

np.random.rand(10, 5) # 生成[0, 1]之間均勻分布的數組10行,5列 np.random.randn(10, 5) # 生成[0, 1]之間均勻分布的數組10行,5列 np.random.randint(10, 20, size=(10, 5)) # 生成[10, 20]之間隨機數組10行,5列 np.random.random(size=(10, 5)) # 生成[0, 1]之間的10行5列的數組 li = list(range(10)) np.random.choice(li, size=(10, 5)) # 從li中產生隨機數,生成10行5列的數組 np.arange(10, 20, 2, ) # 從[10, 20]中以步長為2生成一維數組
其它不常見的隨機數生成函數:

np.random.binomial(100, 0.5, size=(10, 5))
2、數組切片
array對象的切片和list列表的切片操作相同。記住一個規則array[start: end: step]。

dt = np.random.binomial(100, 0.5, size=(10, 5)) dt[1: 3, :] dt[[1,5], :] dt[[1, 4, 7]] dt[:, [2, 4]]
一維和n維數組的轉化

li = np.random.random((1, 100)).reshape(20, 5) # 將1行100列的數組轉換成20行5列的新數組 print(li) li = li.reshape((2, -1)) # 將20行5列的數組轉換成2行50列的新數組 # 將20行5列的數組轉換為2行50列的數組,-1表示根據原數據和當前行[列]參數來自動生成列[行]數 print(li) li = li.reshape(-1, 100) # 將2行50列的數組轉換成1行100列的數組 print(li)
3、數組運算

# 加法 np.sum(l1) # 有意思的sum np.sum(l1, axis=0) np.sum(l1, axis=1) np.sum([l1, l2]) np.subtract(l1, l2) # 減法 np.multiply(l1, l2) # 乘法 np.divide(l1, l2) # 除法 np.power(l1, l2) # 冪乘 np.floor_divide(l1, l2) # 地板除 np.floor(l1) # 向下取整 np.ceil(l1) # 向上取整 np.dot(l1, l2.T) # 點積 l2.T表示轉置 np. # 以下和sum的使用方式相同 np.max(l1) np.min(l1) np.mean(l1) np.median(l1) np.std(l1) np.var(l1) # np.vander() # 必須是一維數組, # li = np.arange(1, 5, step=1, dtype=int) # np.vander(li, len(li))
numpy還有其它的一些常用函數,如np.exp(), np.abs()等,也可以通過np.loadtxt讀取txt文件。
4、數組拼接

l1 = np.linspace(10, 20, num=72).reshape(12, 6) l2 = np.random.random(size=(12, 6)) np.vstack((l1, l2)) # 按列拼接 np.hstack((l1, l2)) # 按行拼接 np.vsplit(l1, [3, 6, 9]) # 按行切割,參數3, 6, 9表示在第幾行切割一下[包括這一行],生成一個list對象 np.hsplit(l1, [1, 3,]) # 按列切割
二、pandas
官方api: http://pandas.pydata.org/pandas-docs/stable/api.html#general-functions
pandas是python數據分析的核心模塊。它主要提供了五大功能:
- 1.支持文件存取操作,支持數據庫(sql)、html、json、pickle、csv(txt、excel)、sas、stata、hdf等。
- 2.支持增刪改查、切片、高階函數、分組聚合等單表操作,以及和dict、list的互相轉換。
- 3.支持多表拼接合並操作。
- 4.支持簡單的繪圖操作。
- 5.支持簡單的統計分析操作。
1、創建和存取pandas對象

dic = [ { "name": "Li", "age": 18, "gender": "male" }, { "name": "Wusir", "age": 16, "gender": "female", } ] df = pd.DataFrame( data=dic, index=None, columns=["name", "age", "gender"], # list(dic.keys()), dtype=None, # dtype不可用列表去給每個column去定義 )

lis = np.random.random(size=(13, 5)) index = pd.period_range(start="2017-01-01", end="2018-01-01", freq="M") # index = pd.period_range(start=pd.Period('2017Q1', freq='Q'), end=pd.Period('2017Q2', freq='Q'), freq='M') df= pd.DataFrame(lis, index=index, columns=list("ABCED")).reset_index(drop=False)

df.to_csv("test", header=True, index=False) pd.read_csv("test")

import pandas as pd import threading import sqlalchemy from sqlalchemy import create_engine engine = create_engine( "mysql+pymysql://root:1234@127.0.0.1:3306/test?charset=utf8", max_overflow=5, pool_size=10, pool_timeout=30, pool_recycle=-1, ) df = pd.read_sql_table("test1", con=engine, columns=None)

import numpy as np import pandas as pd import pymysql def conn(sql): # 連接到mysql數據庫 conn = pymysql.connect( host="localhost", port=3306, user="root", passwd="1234", db="test", ) try: data = pd.read_sql(sql, con=conn) return data except Exception as e: print("SQL is not correct!", sep="\r\n\r\n") finally: conn.close() sql = "select * from test1 limit 0, 10" # sql語句 data = conn(sql) # print(data.columns.tolist()) # 查看字段 print(data) # 查看數據
使用的數據文件為: https://files.cnblogs.com/files/kuaizifeng/test.zip
2、切片與增刪改查
待續。。。。。。