心智圖資源庫 智慧統計學技術
詳細講解了numpy, pandas, plt庫的使用,介紹詳細,知識全面,希望可以對大家有幫助!
編輯於2024-02-04 00:48:40Il s'agit d'une carte mentale sur le système de trading de stocks de flux émotionnels des shares A. Le contenu principal comprend: le système de trading de flux émotionnel A-share, comment utiliser le logiciel TongDaxin pour effectuer le trading de flux émotionnel.
J'ai trié le contenu pertinent de l'imagination psychologique ordinaire. L'imagination est le processus psychologique dans lequel le cerveau humain traite et transforme les apparences stockées et forme une nouvelle image. Il s'agit d'une activité cognitive de haut niveau et complexe, et c'est aussi une forme particulière de processus de réflexion. L'imagination utilise principalement des informations graphiques comme objet de traitement, plutôt que des mots et des symboles. J'espère que cela vous sera utile ~
Il s'agit d'une carte mentale sur l'utilisation irrégulière des classiques, et son contenu principal comprend: les personnes, les anneaux, les lois, les objets et les machines. Fournit une référence utile pour résoudre le problème.
Il s'agit d'une carte mentale sur le système de trading de stocks de flux émotionnels des shares A. Le contenu principal comprend: le système de trading de flux émotionnel A-share, comment utiliser le logiciel TongDaxin pour effectuer le trading de flux émotionnel.
J'ai trié le contenu pertinent de l'imagination psychologique ordinaire. L'imagination est le processus psychologique dans lequel le cerveau humain traite et transforme les apparences stockées et forme une nouvelle image. Il s'agit d'une activité cognitive de haut niveau et complexe, et c'est aussi une forme particulière de processus de réflexion. L'imagination utilise principalement des informations graphiques comme objet de traitement, plutôt que des mots et des symboles. J'espère que cela vous sera utile ~
Il s'agit d'une carte mentale sur l'utilisation irrégulière des classiques, et son contenu principal comprend: les personnes, les anneaux, les lois, les objets et les machines. Fournit une référence utile pour résoudre le problème.
智慧統計學技術
導論
課本
統計思維:程式設計師數學機率統計
Python直譯資料分析與應用
分析數據
明確目標
先決條件
方向
數據收集
資料庫
其他
資料處理
清洗(預處理)
轉化
提取
計算
數據分析
數據分析
pandas
資料探勘
數據展現
圖表
表格
文字
內容
機率論
統計
量化分析實現
呼叫的庫
NumPy
數組與矩陣運算
效率極高
Matplotlib
圖表、視覺化
Pandas
名字由來
panel data和data analysis
功能
數據分析與探索
高階資料結構
Series
一維資料
DataFream
QR 圖資料
NumPy
介紹
強大的N維數組ndarray
廣播功能函數ufunc
整合C/C /Fortran程式碼的工具
線性代數、傅立葉變換、隨機數產生等功能
ndarray
作用
儲存單一資料類型的多維數組
創建
從已有資料中建立多維數組
從list, tuple物件建立 - array()
np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
object — list或tuple對象,強制參數
dtype — 資料類型
copy — 物件被複製
order — 陣列依一定的順序排列:C - 按行;F - 按列;A - 若輸入為F則按列排列,否則按行排列;K - 保留按行和列排列
subok —傳回的陣列被強制為基底類別數組
ndmin — 最小維數
從字串中讀取 - fromstring()
np.fromstring(string, dtype=float, count=-1, sep=”)
建立特定形狀的多維數組
創建‘全1'數組- ones()
np.ones(shape, dtype=None, order='C')
建立‘全0'數組 - zeros()
np.zeros(shape, dtype=float, order='C')
建立空數組 - empty()
np.empty(shape, dtype=float, order='C')
自主填充數組 - full()
np.full(shape, fill_value, dtype=None, order='C')
創建單位矩陣 - eye()
np.full(n)
從numerical range 建立多維數組
建立等差數組數組 - arange()
np.arange(start=0, stop, step=1, dtype=None)
建立等差數組數組 - linspace()
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
num是等分的數
屬性
ndim
維度
shape
每個維度的長度
size
元素的總數
dtype
元素的類型
itemsize
數組中每個元素的大小
索引和切片
同list
方法
reshape(a,b)
改變成a行b列的矩陣
repeat(4, axis=1)
複製4次,加在右邊
numpy.random
np.random.rand(2, 3)
數值取值為[0,1],2行3列
np.random.randint(5, size = (2, 3))
數值小於5,2行3列
NumPy矩陣
是ndarray的子類別
創建矩陣
使用分號隔開數據
matr1 = np.mat("1 2 3;4 5 6;7 8 9")
使用列表建立矩陣
matr2 = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
將小矩陣組合成大矩陣
matr3 = np.bmat("arr1 arr2; arr1 arr2")
矩陣屬性
矩陣運算
ufunc函數
作用
能夠對ndarray數組進行處理的函數,直接用就行了
常用操作
四則運算
比較運算
邏輯運算
np.all(x)函數表示對x用邏輯and
np.any(x)函數表示對x用邏輯or
廣播機制
指不同形狀的陣列之間執行算術運算的方式
原則
讓所有的輸入數組向其中shape最長的數組看齊,shape中不足的部分通過在前面加1補齊
輸出數組的shape是輸入數組shape的各個軸上的最大值
如果輸入數組的某個軸和輸出數組的對應軸的長度相同或其長度為 1,則這個數組能夠用來計算,否則出錯
當輸入數組的某個軸的長度為1時,沿著此軸運算時使用此軸上的第一組值
讀寫文件
二進位檔案
numpy.save(file, arr, allow_pickle=True, fix_imports=True)
注意:儲存路徑中的目錄一定要存在! save函數不會自動建立目錄。
numpy.load(file, mmap_mode=None, allow_pickle=True, fix_imports=True, encoding='ASCII')
文字檔案
np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline=' ',header='',footer='', comments='# ')
numpy.loadtxt(FILENAME, dtype=int, delimiter=' ')
簡易分析
排序
直接排序
指對數值直接進行排序
numpy.sort(a, axis, kind, order)
a
要排序的數組
axis
沿著它排序數組的軸,如果沒有數組會被展開,沿著最後的軸排序
kind
預設為'quicksort'(快速排序)
order
如果數組包含字段,則是要排序的字段
間接排序
指根據一個或多個鍵對資料集進行排序
numpy.argsort(a)
函數對輸入數組沿著給定軸執行間接排序,並使用指定排序類型傳回資料的索引數組(下標)
numpy.lexsort(a,b)
函數使用鍵序列執行間接排序,鍵可以看作是電子表格中的一列,傳回索引數組(下標)
去重
numpy.unique
統計函數
matplotlib
介紹
提供了豐富的數學繪圖函數,可以很方便的繪製資料圖表
其他視覺化統計工具
echart
詞雲
標準方法
基本流程
創建畫布
<是否建立子圖>
選定子圖
設定X、Y軸
新增圖例(細節)
<是否完成繪製>
儲存顯示
步驟解析
創建畫布
plt.figure(figsize=(x,y))
有畫布的話可以創建多個圖形
plt.subplot(nrows, ncols, index)
nrows 參數指定要將資料圖區域分成多少行
ncols 參數指定將資料圖區域分成多少列
index 參數指定取得第幾個區域
選定子圖
折線圖
plot
散點圖
scatter
長條圖
水平
bar
垂直
barh
直方圖
hist
圓餅圖
pie
……
設定X、Y軸
Axes
plot
plt.plot(x,y)
x和y是兩個數組,如果只輸入一個預設x軸為數組下標
還有設定顏色、透明度、樣式、寬度等參數
plt.plot(x, y, color='green',alpha=0.5,linestyle='-',linewidth=3,marker='*')
新增圖例(細節)
標題、區間上下限、圖例、分段、版面、軸心等
設定標題
plt.xlabel('Time')
plt.ylabel("Temp")
plt.title('Title')
中文顯示
plt.rcParams['font.sans-serif'] = ['SimHei']
自訂X軸刻度
plt.xticks(range(0,len(x),4),x[::4],rotation=45)
X軸區間和上下限
plt.set_xlim([xmin, xmax]) #設定X軸的區間
plt.axis([xmin, xmax, ymin, ymax]) #X、Y軸區間
plt.set_ylim(bottom=-10) #Y軸下限
plt.set_xlim(right=25) #X軸上限
快速方法
import matplotlib.pyplot as plt plt.plot(x,y) plt.show()
Pandas
特點
它提供了簡單、高效、帶有預設標籤(也可以自訂標籤)的物件。
能夠快速到從不同格式的檔案載入資料(例如 Excel、CSV 、SQL檔案),然後將其轉換為可處理的物件;
能夠按資料的行、列標籤進行分組,並對分組後的物件執行聚合和轉換操作;
能夠很方便地實現資料歸一化操作和缺失值處理;
能夠很方便地對 DataFrame 的資料列進行增加、修改或刪除的操作;
能夠處理不同格式的資料集,例如矩陣資料、異質資料表、時間序列等;
提供了多種處理資料集的方式,例如建立子集、切片、過濾、分組以及重新排序等。
內建資料結構
Series
定義
1維,能夠儲存各種資料類型,例如字元數、整數、浮點數、Python 物件等,Series 用 name 和 index 屬性來描述 資料值。
創建
s=pd.Series( data, index, dtype, copy)
data
輸入的數據,可以是標量、列表、字典、ndarray 陣列等。
index
索引值必須是惟一的,如果沒有傳遞索引,則預設為 np.arrange(n)。
dtype
dtype表示資料類型,如果沒有提供,則會自動判斷。
copy
表示對 data 進行拷貝,預設為 False。
基本操作
訪問
下標索引
類似列表
標籤索引
類似字典
Numpy的運算和操作都適用
可以進行切片
常用屬性
dtype
傳回物件的資料類型。
empty
傳回一個空的 Series 物件。
ndim
傳回輸入資料的維數。
size
傳回輸入資料的元素數量。
size跟count的差別: size計數時包含NaN值,而count不包含NaN值
values
以 ndarray 的形式傳回 Series 物件。
index
傳回一個RangeIndex對象,用來描述索引的取值範圍。
常用方法
describe()
count:數量統計,此列共有多少有效值 unipue:不同的值有多少個 std:標準差 min:最小值 25%:四分之一分位數 50%:二分之一分位數 75%:四分之三分位數 max:最大值 mean:平均數
head()&tail()查看數據
head(n)傳回前 n 行數據,預設顯示前 5 行數據
tail(n)傳回的是後 n 行數據,預設為後 5 行
isnull()&nonull()偵測缺失值
isnull():如果為值不存在或缺失,則傳回 True。
notnull():如果值不存在或缺失,則傳回 False。
value_counts
統計頻數
DataFrame
定義
2維,既有行索引,也有列索引。行索引是 index,列索引是 columns。 在建立該結構時,可以指定對應的索引值。
表格中每列的資料型別可以不同,例如可以是字串、整數或浮點型等
創建
df =pd.DataFrame( data, index, columns, dtype, copy)
data
輸入的數據,可以是列表、字典嵌套列表、列表嵌套字典、字典形式的 Series等
列索引操作
列索引選取資料列
print(df ['one'])
print(df[['單字', '漢字', '意思']])
列索引新增資料列
df['three']=pd.Series([10,20,30],index=['a','b','c'])
df['four']=df['one'] df['three']
df.insert(1,column='score',value=[91,90,75])
數值1代表插入到columns列表的索引位置
列索引刪除資料列
df.pop('two')
拆分提取列
df[df[‘column_name’] == some_value]
行索引操作
標籤索引
df1.loc["b" : "e", "bx" : "ex"]
先列
下標索引
df1.iloc[2 : 6, 2 : 4]
先列
混合索引
df1.ix[2 : 6, "bx" : "ex"]
先列
切片操作多行選取
df[2 : 4]
新增資料行
df = df.append(df2)
刪除資料行
df = df.drop(0)
拆分提取行
df.loc[df['column_name'] == str]
輸出某一列是NaN的行
df[df['字'].isna()]
常用屬性
T
行和列轉置。
axes
傳回僅以行軸標籤和列軸標籤為成員的清單。
dtypes
傳回每列資料的資料類型。
empty
DataFrame中沒有資料或任意座標軸的長度為0,則傳回True。
ndim
軸的數量,也指數組的維數。
shape
傳回一個元組 (a,b),a 表示行數,b 表示列數
size
DataFrame中的元素數量
size跟count的差別: size計數時包含NaN值,而count不包含NaN值
values
使用 numpy 陣列表示 DataFrame 中的元素值
常用方法
describe(include='all')
同Series
不加參數的話只統計數值列
head()&tail()
同Series
info()
查看資訊
shift()
將行或列移動指定的步幅長度
pivot()
將一個資料框中的列進行轉換,使得某一列成為新的行索引,並用另一列的值來填入這個索引對應的儲存格。
參數
index: 將要成為新的行索引的列名
columns: 將要成為新的列索引的列名
values: 將會填入新行索引和新列索引之間的儲存格的列名
sort_values(by=‘進行排序的列名或索引值’, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’, ignore_index=False, key=None)
sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)
axis:axis 預設為 0,即指依照行的索引進行排序;axis 設定為 1,即指依照列的索引進行排序 level:預設None,否則按照給定的 level 順序排列。 ascending:ascending 預設為 True,即升序,設定為 False 時候為降序。 inplace:預設False,否則排序之後的資料直接取代原來的資料框 kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。用戶可以自行選用 na_position:缺失值預設排在最後{"first","last"},參數「 first」將NaN放在開頭,「last」將NaN放在結尾。 ignore_index:布林量,預設為 False,如果為 True, 那麼 axis 則是 label 0,1,2;這是新加的 key:這是一個可呼叫的函數,即在排序之前先對 index 的值執行 key 函數。這有點類似內建函數 sorted() 函數裡面的 key 函數
遍歷
遍歷每一行
for index, row in df.iterrows():
遍歷每一列
for column, value in df.iteritems():
資料表清洗
用數字0填滿空值
df.fillna(value=0)
使用列prince的均值對這列NA進行填充
df['prince'].fillna(df['prince'].mean())
清除city字段的字元空格
df['city']=df['city'].map(str.strip)
大小寫轉換
df['city']=df['city'].str.lower()
資料型別轉換
df['price'].astype(int)
更改列/行索引
全部修改
手寫索引
df.columns=['a','b','c']
df.index=['a','b','c']
引用索引
df.set_columns("idx",inplace=False)
df.set_index("col",inplace=False)
部分修改
df.rename(columns={'category': 'category-size'},inplace=False)
df.rename(index={'category': 'category-size'},inplace=False)
重複
尋找重複項:df.duplicated()可以傳回布林數組,指示每一行是否為重複項。
刪除後出現的重複值
df['city'].drop_duplicates()
刪除先出現的重複值
df['city'].drop_duplicates(keep='last')
選擇主鍵
subset=['學號']
刪除NaN
df2=df.dropna(axis=0,how="all",inplace=False)
how="all"表示某行(列)全為NaN才會刪除。 how="any"表示只要有一個NaN就會刪除(預設)
資料替換
df['city'].replace('sh', 'shanghai')
數據表合併
merge
pd=pd.merge(df,df1,how='inner') #匹配,合併,交集,默認 df_left=pd.merge(df,df1,how='left') df_right=pd.merge(df,df1,how='right') df_outer=pd.merge(df,df1,how='outer') #並集,效果等同於前兩個組合
append
已經被棄用,推薦使用concat
join
concat
pd.concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False,keys=None,levels=None,names=None,verify_integrity=False,copy=True)
統計
var()
變異數
cov()
協方差
匯總
範例1
df = pd.DataFrame({ 'A': ['a', 'b', 'a', 'c', 'a', 'c', 'b', 'c'], 'B': [2, 8, 1, 4, 3, 2, 5, 9], 'C': [102, 98, 107, 104, 115, 87, 92, 123]})
方法
按A列分組(groupby),取得其他列的平均值
df.groupby('A').mean()
取出某一列
print(df.groupby('key1')['data1'].mean())
按多列進行分組(groupby)
df.groupby(['A','B']).mean()
範例2
df = pd.DataFrame({' A': list('XYZXYZXYZX'), 'B': [1, 2, 1, 3, 1, 2, 3, 3, 1, 2], 'C': [12, 14, 11, 12, 13, 14, 16, 12, 10, 19]})
方法
針對某列使用agg()時進行不同的統計運算
df.groupby('A')['B'].agg({'mean':np.mean, 'standard deviation': np.std})
lambda運算
少數族裔分數補償
df['ExtraScore'] = df['Nationality'].apply (lambda x : 5 if x != '漢' else 0)
成績合格
df['pass_reading'] = df['閱讀成績'].apply (lambda x: 'Pass' if x >= 60 else 'Fail')
畫圖
ax = series1.plot(kind='bar')
fig = ax.get_figure() fig.subplots_adjust(bottom=0.4) fig.savefig('output.png')
pd.plot(kind='scatter',x="a",y="b",alpha=0.1)
alpha是透明度
pd.hist(bins=50,figsize=(7,7))
數據輸入輸出
輸入
讀取csv
df = pd.read_csv("mtcars.csv", encoding="utf-8")
寫入Excel
df = pd.read_excel("mtcars.csv")
輸出
寫入Excel
pd.to_excel('excel_to_python.xlsx', sheet_name='bluewhale_cc')
寫入到CSV
pd.to_csv('excel_to_python.csv')
Pandas與NumPy區別
datetime
1).date子類別可以建立日期時間序列的資料、2).time子類別可建立小時分時間數據,而3).子類別datetime則可以描述日期小時分資料。
import datetime cur = datetime.datetime(2018,12,30, 15,30,59) print cur,type(cur) d = datetime.date(2018,12,30) print d t = datetime.datetime(2018,12,30).now() print t
2018-12-30 15:30:59 <type 'datetime.datetime'> 2018-12-30 2018-12-16 15:35:42.757826
4).可以使用datetime的timedelta模組給出時間間隔(差)。
import datetime cur0 = datetime.datetime(2018,12,30, 15,30,59) print cur0 cur1 = cur0 datetime.timedelta(days = 1) print cur1 cur2 = cur0 datetime.timedelta(minutes = 10) print cur2 cur3 = cur0 datetime.timedelta(minutes = 29,seconds = 1) print cur3
2018-12-30 15:30:59 #cur0 2018-12-31 15:30:59 #cur1 2018-12-30 15:40:59 #cur2 2018-12-30 16:00:00 #cur3
用datetime資料建立time series時間序列資料。意思就是用datetime創造的時間當index。
從 datetime import datetime, timedelta import numpy as np import pandas as pd b = datetime(2018,12,16, 17,30,55) vi = np.random.randn(60) ind = [] for x in range(60): bi = b timedelta(minutes = x) ind.append(bi) ts = pd.Series(vi, index = ind) print ts[:5]
2018-12-16 17:30:55 -1.469098 2018-12-16 17:31:55 -0.583046 2018-12-16 17:32:55 -0.775167 2018-12-16 17:33:55 -0.740570 2018-12-16 17:34:55 -0.287118 dtype: float64
補充
類別
Hist類
將值映射到一個用整數表示的數量
Pmf類
將值映射到一個用浮點數表示的機率
上述過程稱為常態化,即機率總和為1
CDF類
PMF的不足
PMF的適用情形:處理的資料比較少時
隨著資料的增加,每個值的機率就會降低,而隨機雜訊的影響就會增加
解決辦法
資料分組:決定分組區間的大小需要技巧
分組區間大到能夠消除雜訊的時候,可能會將有用資訊捨去
CDF
累計分佈函數
能完整描述一個實數隨機變數X的機率分佈,是機率密度函數的積分
百分位秩
以考試成績為例:兩種形式呈現 1.原始分數 2.百分位秩:原始分數不高於你的人在全部考試人數中所佔的比例再乘以100。 例:若某人在90百分位秩,表示其比90%的人成績好;或至少不比90%的考試人員差。
計算出CDF後,能夠較為方便地計算出百分位數和百分位秩
函數
PercentileRank(x)
對給定的值x,計算其百分位秩
100*CDF(x)
Percentile (p):對給定的百分位秩,計算對應的值x;
四分位距
四分位數
四分位距是統計學中的一種描述離散資料分佈程度的指標。它分別表示數據中第25%、第50%、第75%的位置。
四分位距
高四分位減去低四分位,就是四分距。
作用
四分位數距表示的是資料的離散程度,越大表示資料的離散程度越高。
箱型圖
有了最小值,低四分位,中位數,高四分位,最大值,這五個數值,我們就可以畫箱線圖。
異常值
我們可以順便引出定義異常值的方法:如果一個數值特別小,比低四分位減去1.5倍四分距還要小,可以算作異常值;對應的,如果一個數值特別大,比高四分位數加上1.5倍四分距還要大,也可以算是異常值。
CCDF(a) = P(X > a)= 1- CDF(a)
概念
PDF:機率密度函數(probability density function), 在數學中,連續型隨機變數的機率密度函數(在不至於混淆時可以簡稱為密度函數)是一個描述這個隨機變數的輸出值,在某個確定的取值點附近的可能性的函數。
PMF:機率質量函數(probability mass function), 在機率理論中,機率質量函數是離散隨機變數在各特定取值上的機率。
CDF:累積分佈函數 (cumulative distribution function),又叫分佈函數,是機率密度函數的積分,能完整描述一個實隨機變數X的機率分佈。
分佈建模
指數分佈
常態分佈
機率密度函數
累計分佈函數
對數常態分佈
如果一組數值對數轉換後服從常態分佈,就稱其服從對數常態分佈。即用log(x)代替常態分佈裡的x。
帕累托分佈Pareto
變數之間的關係
協方差
協方差可以用來衡量相關變數變化趨勢是否相同,也可用於衡量兩個變數的總體誤差。
因為數值和單位難解釋,一般較少使用
方差可以看成協方差的一種特殊情況,即當兩個變數是相同的情況。
如果兩個變數的變化趨勢一致,也就是說如果其中一個大於自身的期望值時另外一個也大於自身的期望值,那麼兩個變數之間的協方差就是正值;
如果兩個變數的變化趨勢相反,即其中一個變數大於自身的期望值時另外一個卻小於自身的期望值,那麼兩個變數之間的協方差就是負值;
皮爾森秩 Pearson
適用範圍
兩組資料變數分佈正常,且兩者呈線性關係
用標準分數取代原來的值,計算兩個標準分數的乘積
稱為皮爾遜相關係數,其中-1<=p<=1, p=1:表示兩個變數完全正相關; p=-1:表示兩個變數完全負相關;
斯皮爾曼秩 Spearman
適用範圍
存在異常值和變數分佈非常不對稱:
先計算序列中數值的秩:即某一數值在序列中依排序後的位置,再計算秩的皮爾遜相關係數
範例
序列{7,1,2,5} 對序列從小大到排序,結果為{4,1,2,3} 所以5的秩為3