天天看點

Pyhton—Pyhton類庫2. matplotlib3.numpy4. pandas

pip install virtualenv

#檢視是否安裝成功

virtualenv --version

1.2 安裝virualenvwrapper

virualenvwrapper 更友善的使用virtualenv

Java

複制代碼

#安裝

pip install virtualenvwrapper-win

#建立虛拟環境

mkvirtualenv [環境名稱]

#切換虛拟環境

workon [環境名稱]

#退出虛拟環境

deactivate

#删除虛拟環境

rmvirtualenv [環境名稱]

2. matplotlib

2.1 環境搭建

matplotlib==2.2.2

numpy==1.14.2

pandas==0.20.3 

TA_Lib==0.4.16 技術名額庫

tables==3.4.2 讀取大資料平台的檔案

jupyter==1.0.0 資料分析與展示的平台

将上述檔案儲存至 requirements.txt檔案中

#切換到虛拟環境,安裝上面的包

workon matploblib

pip install -r requirements.txt

2.2 jupyter Notebook

web版的ipython

常用指令

#啟動jupyter

jupyter notebook

2.3 matplotlib介紹

畫圖,用于開發2d圖示 3d也可以,實作資料可視化

2.3.1 demo

2.3.1.2 簡單demo

import matplotlib.pyplot as plt

#建立畫布

plt.figure()

#畫圖

plt.plot([1,2,4,5,1],[2,5,7,100,10])

#顯示圖像

plt.show()

2.3.1.3 demo1

import random

#畫出某個城市一個小時内的每一分鐘的溫度變化折線圖

#準備資料

x = range(60)

y = [random.uniform(15,18) for i in x]

# 建立畫布

plt.figure(figsize=(20,8),dpi = 80)

plt.plot(x,y)

#修改x軸刻度

plt.rcParams['font.sans-serif']=['SimHei']

x_lable = ["11點{}分".format(i) for i in range(60)]

plt.xticks(x[::5],x_lable[::5])

#修改y軸刻度

plt.yticks(range(40)[::5])

#修改x軸字段

plt.xlabel("時間")

#x修改y軸字段

plt.ylabel("溫度")

#添加虛線網格

plt.grid(True,linestyle="--",alpha=0.5)

#修改畫布标題

plt.title("溫度變化曲線圖")

2.3.2 結構

三層結構

2.3.2.1 容器層

  1. 畫闆層Canvas
  2. 畫布層Figure plt.figure()
  3. 繪圖區/坐标區Axes  plt.subplots()

2.3.2.2 輔助顯示層

圖表的圖例,刻度等

2.3.2.3 圖像層

在繪圖區畫各種各樣的圖表

2.3.3 pyplot子產品

作用與目前figure的目前Axes

提供了各種畫圖的函數

#建立畫布 可以指定畫布的大小 figsize,和圖像的清晰度 dpi

plt.figure(figsize=(),dpi=)

#将目前畫布儲存為圖檔 必須在show()之前調用

plt.savefig("儲存路徑")

#修改x軸刻度 可以傳入兩個參數,第一個顯示的點,第二個參數可以格式化顯示的點的名稱 可以看demo1

plt.xticks(range[60],[名稱])

plt.yticks()

#修改x,y軸标題

plt.xlabel("标題")

plt.ylabel("标題")

#修改标題

plt.title("标題")

#增加網格 第一個預設True 顯示不顯示網格  linestyle="--"表示網格線條為虛線,alpha=0.5 透明度 

#顯示圖例

plt.plot(x,y,label="圖例名稱")

plt.lenged("可以指定圖例顯示的位置 使用loc參數")

#折線圖

plt.plot()

#散點圖

plt.scatter()

#柱狀圖

plt.bar()

#餅狀圖

plt.pie()

#直方圖

plt.hist()

# matplotlib.pyplot.hist(  

#     weights=None, cumulative=False, bottom=None,   

#     histtype=u'bar', align=u'mid', orientation=u'vertical',   

#     rwidth=None, log=False, color=None, label=None, stacked=False,   

#     hold=None, **kwargs)

3.numpy

高效的運算工具

3.2 ndarray

numpy的核心 n維數組

numpy使用ndarray來對資料進行處理,對大資料的處理計算效率要遠高于python原生的list

3.2.1  ndarrray的優勢

3.2.1.1 存儲風格

同種類型

3.2.1.2 并行化運算(向量化運算)

3.2.1.3 底層

c語言編寫解除了GIL 支援多線程

3.2.2 屬性

ndarray的屬性有

shape ndarray的行跟列

Pyhton—Pyhton類庫2. matplotlib3.numpy4. pandas

ndim 次元

size 元素 等于shape行x高

dtype 類型 整數預設是int64

itemsize 看有幾個位元組

3.2.3 基礎使用

3.2.3.1 生成數組的方法

  1. 生成0和1的方法

np.zeros(形狀)

np.ones(形狀)

  1. 從現有數組中生成

np.array() 深拷貝

np,asarray() 淺拷貝

np.cory() 深拷貝

  1. 生成固定範圍的數組

np.linspace(0,10,100) #生成從0到10之間的100個元素 包括0和10 等距

np.arange(0,10,100)#生成從0到10之間的元素 100是步長 不包括10(左閉右開)

  1. 生成随機數組

    生成随機數組可以指定分布狀況,

    均勻分布

    可能性相當的分布 通過直方圖檢視分布情況

    正态分布

np.random.uniform(low=,high=,size=) #均勻分布 左閉右開包含low 不包含heigh

np.random.normal(loc=,scale=,size=) #正态分布 三個參數分别為 均值,标準差,形狀

### 生成随機數組并展示為直方圖

data = np.random.uniform(low=-1,high=1,size=1000000)

data

plt.figure(figsize=(20,8),dpi=80)

plt.hist(data,1000)

#展示

data2 = np.random.normal(loc=1.5,scale=0.2,size=1000000)

#繪制直方圖

plt.hist(data2,1000)

3.2.3.2 切片和形狀的修改

#隻改變形狀,資料不改變,并且傳回新的ndarray 對原有的ndarray不修改

nd.reshape(shpae)

#隻改變形狀,沒有傳回值,直接對原有的ndarray進行修改

nd.resize(shpape)

#轉置 修改資料

T

3.2.3.3 修改類型/序列化/數組去重

#修改類型

np.asarray("int32")

#序列化 tostring方法再3.8版本中過時 改為tobytes()

np.tostring()

np.tobytes()

#數組去重

#原生的set()隻能對一維數組去重

np.unique(ndarray)

#将二維數組轉換為一維數組

ndarray.flatten()

3.2.4 運算

布爾索引: numpy支援布爾索引,在使用ndarray的時候,可以通過布爾索引傳回想要的數組

data5[data5>0.5]

3.2.4.1 邏輯運算

#當全部為True時,傳回True,否則傳回False

np.all(ndarray)

np.all(data5>-0.5)

#當其中有一個為True就傳回True,全部為False時才傳回False

np.any(ndarray)

#三元運算符 可以對ndarray的值進行操作

np.where(ndarray, True的值, False的值)

np.where(data5>-0.5,100,-100)

#邏輯與 邏輯或 可以與where聯合使用

logical_and(條件1,條件2)

logical_or(條件1,條件2)

np.where(np.logical_and(data5>0.5,data5<0.7),1,0)

3.2.4.2 統計運算

max, min等

#取ndarray的最大值 axis=1表示跟據行取最大值

temp.max(axis=1)

np.max(temp,axis=1)

#取ndarray的最大值所在位置 axis=1表示跟據行取最大值

np.argmax(temp,axis=1)

temp.argmax(axis=1)

3.2.4.3 數組間運算

3.2.4.4 矩陣運算

矩陣 二維數組

存儲矩陣的兩種方法:

  1. ndarray

np.array()

  1. 使用matrix資料結構

np.mat()

3.2.4.4.1 乘法運算

np.matual()

matrix

a * b

3.2.4.5 合并

#水準拼接

np.hstack()

#豎直拼接

np.vstack()

#axis=0 豎直拼接 axis=1 水準拼接

np.concatentenate((a,b),axis=0)

3.2.5 IO操作

3.2.5.1 讀取檔案

使用numpy讀取資料檔案

np.gedata = np.genfromtxt("test.csv",delimiter=",")

如果資料中有字元串,會出現讀取不出來,需要對資料進行處理

處理方法一般有兩種

  1. 删除資料
  2. 對資料進行替換 使用列的平均數進行替換

4. pandas

資料處理工具

https://pandas.pydata.org/docs

4.1 DataFrame

import pandas as pd

columns=pd.date_range(start="20201112",periods=8,freq="b")

columns

indexs = ["股票{}".format(i+1) for i in range(10)]

print(indexs)

pd.DataFrame(data1,index=indexs,columns=columns)

基礎文法

pd.DataFrame(資料,index=行名稱,columns=列名稱)

#行名稱列名稱都是數組,要與資料的形狀相對應

4.1.2 結構

既有行索引又有列索引的二維數組

可以看作是ndarray加上了行索引和列索引

Pyhton—Pyhton類庫2. matplotlib3.numpy4. pandas

4.1.3 屬性

shape

index

values 值就是ndarray

T 轉置

4.1.4 方法

#擷取DataFrame的前幾行 參數不穿預設前5行

dataFrame1.head(8)

#擷取DataFrame的後幾行 參數不穿預設後5行

dataFrame1.tail(7)

4.1.5 設定索引

修改行索引的方法

  1. 全部修改

#不能直接對DataFrame的索引的某個值進行修改,隻能整體進行修改

dataFrame1.index = ["股票_update{}".format(i) for i in range(10)]

#這樣就對index全部修改

  1. 重置索引

#drop參數預設為False 如果為True,會把原有的index當成一列,再插入預設的索引列

dataFrame1.reset_index(drop=True)

  1. 設定新索引
  2. Pyhton—Pyhton類庫2. matplotlib3.numpy4. pandas
  3. #設定新索引,這樣設定完索引,DataFrame會變成一個可以存儲多元資料的數組

dataFrame1.set_index(["2020-11-12 00:00:00","2020-11-13 00:00:00"])

#注意set_index完的index變化了會變成 MultiIndex

4.2 Panel

存儲三維資料

棄用 使用 MultiIndex代替

4.3 Series

存儲一維數組

4.3.1 建立Series

Python

#pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)

   pd.Series(np.arange(0,10,2))  

   pd.Series(np.arange(0,10,2),index=list("abcde"))

   pd.Series({"red":1,"yellow":2})

4.3.2 屬性

1index

2values

4.4 索引操作資料

使用索引擷取操作資料

4.4.1 使用索引擷取資料

1直接索引

Pyhton—Pyhton類庫2. matplotlib3.numpy4. pandas

#直接索引必須先列後行

data["User_id"][113639]

#data是一個DataFrame User_id是列索引,113639是行索引

2按名字索引

data.loc[]

3按數字索引

data.iloc[]

#第一行第三列

data.iloc[1,3]

4組合索引 不用

data.ix[]

4.4.2 指派操作

使用索引操作指派

data.loc[0,'Merchant_id']=450

data.iloc[0,1]=410

4.4.3 排序

4.4.3.1 對内容排序

1DataFrame

data.sort_values(by="Date_received",ascending=False)

#by可以是一個清單

2series

sr.sort_values()

#series 是一維數組 是以不用再指定某個字段

4.4.3.2 對索引排序

data.sort_index()

4.5 運算

4.5.1 算術運算

可以直接對DataFrame,Series進行加減乘除

4.5.2 邏輯運算

#将查詢條件放入query參數 傳回符合條件的資料

data.query("Distance==450")

#判斷Merchant_id是否存在410的資料

data[data["Merchant_id"].isin([410])]

4.5.3 統計運算

data.describe()

...

4.5.4 自定義運算

apply()

4.6 文檔的讀取和存儲

4.6.1 讀取

https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html?highlight=read_csv#pandas.read_csv

read_csv()

4.6.2 存儲

to_csv()

4.7 高階用法

4.7.1 處理NaN資料

pd.isnull(DataFrame)

pd.notnull(DataFrame)   

#删除NaN行

DataFrame.dropna(inplace=False)

#替換NaN

DataFrame.fillna(value,inplace=False)

#替換其他預設符号為NaN

DataFrame.replace(to_replace,value)

4.7.2 資料離散化

資料離散化,将一組資料經過處理成矩陣的形式

比如 一組身高資料 160 165 170 175 ...

資料離散化就是将 身高分為 矮 中 高三個屬性,達到如下效果

1

4.7.2.1 實作資料離散化

1分組

a自定義分組

ⅰpd.cut(data,bins)

b自動分組

ⅰpd.qcut(data,bins)

2求啞變量

aget_demmies(data,prefiex="分組")

#求分組

cut = pd.qcut(data_received,3)

#求啞變量矩陣

test_dummies = pd.get_dummies(cut,prefix="test")

4.7.3 合并

#axis=1水準

pd.concat([data1,data2],axis=1)

pd.merge(left,right,how="inner",on=[])

4.7.4 交叉表和透視表

#交叉表

crosstab(val1,val2)

#透視表

4.7.5 分組與聚合

#分組

groupby()

#聚合函數

max()

data.groupby(data["Date_received"])["Discount_rate"].max()

5.scikit-learn

機器學習子產品

不支援GPU加速運算

5.1 預處理子產品