python模塊之numpy與pandas


一、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))
list和array互相轉化
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))
View Code

  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,])  #  按列切割
View Code

二、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")
保存成csv
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)
讀取一張table
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)  # 查看數據
讀取sql語句

    使用的數據文件為: https://files.cnblogs.com/files/kuaizifeng/test.zip

  2、切片與增刪改查

    待續。。。。。。

    

 

 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM