文章目錄
(一)、函數+類
(二)、併發+正則表達式
安裝
使用pip安裝,使用了清華的鏡像速度會快很多:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ***
17、Numpy
numpy是用於高性能科學計算和數據分析,是常用的高級數據分析庫的基礎包。
1)數組與數據類型
根據輸入數據的類型可以自動進行轉換,數據類型比如有:int8,int16,int32,int64,float…
還可以使用numpy實現兩個列表的數學計算,比如相加
import numpy as np
arr1 =np.array([2,3,4])
print(arr1)
print(arr1.dtype)
arr2=np.array([1.2,2.3,3.4])
print(arr2)
print(arr2.dtype)
print(arr1+arr2)
[2 3 4]
int32
[1.2 2.3 3.4]
float64
[3.2 5.3 7.4]
2)數組和標量的計算
標量是有大小沒有方向的
data=[[1,2,3],[4,5,6]]
arr=np.array(data)#轉化爲numpy的二維矩陣
print(arr)
#對矩陣的操作
print(np.zeros(10))#全0,一維
print(np.zeros((3,5)))#全零,2維
print(np.ones((2,3,2)))#全1,3維
3)數組的索引和切片
import numpy as np
arr = np.arange(10)
print(arr)
arr[5:8]=10#不包括8
print(arr)
arr_slice=arr[5:8].copy()
arr_slice[:]=15
print(arr)
print(arr_slice)
[0 1 2 3 4 5 6 7 8 9]
[ 0 1 2 3 4 10 10 10 8 9]
[ 0 1 2 3 4 10 10 10 8 9]
[15 15 15]
更多關於切片的操作在另一篇博客中詳細地寫了:
Python中numpy數組切片:print(a[0::2])、a[::2]、[:,2]、[1:,-1:]、a[::-1]、[ : n]、[m : ]、[-1]、[:-1]、[1:]等的含義(詳細)
18、Pandas
是用於數據預處理和清洗的非常重要的庫。
最重要的數據結構是Series,DataFrame
基礎實例:
from pandas import Series,DataFrame
import pandas as pd
obj=Series([4,5,6,-7])
print(obj)
print(obj.index)
print(obj.values)
0 4
1 5
2 6
3 -7
dtype: int64
RangeIndex(start=0, stop=4, step=1)
[ 4 5 6 -7]
1)Series基本操作
Series是一維數組
obj2 = Series([4,7,-5,3],index=['d','b','c','a'])
print(obj2)
obj2['c']=6
print(obj2)
print('a'in obj2)#當作列表來用
存儲在字典中的數據怎麼轉化爲Series呢?
data={'beijing':35000,'shanghai':71000,'guangzhou':16000}
obj3=Series(data)#轉化
print(obj3)
obj3.index=['bj','sh','gz']#可以直接修改索引
print(obj3)
2)DataFrame基本操作
DataFrame更像是電子表格,DateFrame可以操作二維,三維,或更高維的數組。一般用等長的列表創建。例如使用字典,其中是等長列表:
1 創建
data = {'city': ['shanghai', 'shanghai', 'beijing'],
'year': [2016, 2017, 2016],
'pop': [1.5, 1.7, 2.4]}
frame = DataFrame(data)
print(frame)
2 排序(交換列的順序)
frame1=DataFrame(data,columns=['year','city','pop'])
print(frame1)
3 提取有兩種方式
print(frame1['city'])
print(frame1.year)
4 生成新列
判斷是否是beijing
frame1['cap'] = frame1.city=='beijing'
print(frame1)
5 轉置
行的索引變成列的索引,列的索引變成行的索引。
print(frame1.T)
6 重新索引及空值填充
增加了索引e
obj = Series([4,7,-5,3],index=['d','b','c','a'])
obj1 = obj.reindex(['a','b','c','d','e'])
print(obj1)
增加了索引e,e是空的(NaN)。如果要填充,可以使用:obj1 = obj.reindex([‘a’,‘b’,‘c’,‘d’,‘e’].fill_value=0)
但這樣有時候是不嚴謹的,我們使用上面或者下面的值來補充空值。
method=‘ffill’----使用上面的值填充,method=‘bfill’----使用下面的值填充。
obj = Series(['a','b','c'],index=[0,2,4])
print(obj.reindex(range(6),method='ffill'))
print(obj.reindex(range(6),method='bfill'))
7 刪除缺失值
from numpy import nan as NA
data=Series([1,NA,2])
print(data.dropna())
dropna()刪除所有有NaN的值,我們也可以進行控制,比如只刪除整行全是NaN的:
print(data.dropna(how='all))
刪除整列全是NaN的:
print(data.dropna(axis=1,how='all))
8 填充NaN
fillna(0)修改的是副本,使用inplace=True纔是確定修改了!
print(data.fillna(0),inplace=True)
19、Matplotlib
1)簡單曲線
import matplotlib.pyplot as plt
plt.plot([1,3,5],[4,8,10])
plt.show()
2)繪製numpy進行計算的值
import numpy as np
#linspace產生一條直線,x軸定義域爲-3.14~3.14,中間間隔100個元素
x=np.linspace(-np.pi,np.pi,100)
plt.plot(x,np.sin(x))
plt.show()
3)繪製多條線
plt.figure()—創建圖表
dpi—圖像的精細度,越大文件就越大,雜誌就要300以上
x=np.linspace(-np.pi*2,np.pi*2,100)
plt.figure(1,dpi=50)#dpi是精度
for i in range(1,5):#四條線
plt.plot(x,np.sin(x/i))
plt.show()
4)繪製直方圖
plt.figure(1,dpi=50)#dpi是精度
data=[1,1,1,2,3,4]
plt.hist(data)#只要傳入數據,直方圖就會統計傳入的數據
plt.show()
5)散點圖
x=np.arange(1,10)
y=x
fig=plt.figure()
plt.scatter(x,y,c='r',marker='o')#c='r'指顏色紅色,marker指定點形狀
plt.show()
6)使用csv數據畫有分類(不同顏色)的散點圖
思路是使用pandas讀取csv,但是繪出的圖是單一色調,如果想要依據某一列的數對點進行分類也就是顏色上的區分,我們引入seaborn庫
可以在官網找實例學習,都有詳細的代碼的。(還有matplotlib庫官網實例可學習一下)
數據使用的是常見的iris數據集,可以在UCI機器學習庫中找到,數據中的virginica列是鳶尾花(iris)的分類,我們就以這一列來區分不同點,賦予不同的顏色,便於後期分析。
import pandas as pd
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")#處理warning,忽略
iris=pd.read_csv("./iris_training.csv")
sns.set(style="white",color_codes=True)
#FacetGrid一般繪圖函數
#hue使用彩色顯示分類,virginica有0/1/2三種取值,所以會顯示三種顏色
#add_legend顯示分類的描述信息
#setosa,versicolor是x,y軸,使用map改變使用的不同的列
sns.FacetGrid(iris,hue="virginica",size=5).map(plt.scatter,"setosa","versicolor").add_legend()
plt.show()