Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
數(shù)據(jù)可視化:是關(guān)于數(shù)據(jù)視覺表現(xiàn)形式的科學(xué)技術(shù)研究。其中,這種數(shù)據(jù)的視覺表現(xiàn)形式被定義為“一種以某種概要形式抽提出來的信息,包括相應(yīng)信息單位的各種屬性和變量”。
數(shù)據(jù)可視化主要是借助于圖形化手段,清晰有效地傳達(dá)與溝通信息。
Power BI、Tableau、Gehpi和Echarts
Python是一個(gè)結(jié)合了 解釋性、編譯性、互動(dòng)性和面向?qū)ο?/strong> 的高級(jí)程序設(shè)計(jì)語言,結(jié)構(gòu)簡(jiǎn)單,語法定義清晰。Python最具特色的就是使用縮進(jìn)來表示代碼塊,不需要使用大括號(hào){}。縮進(jìn)的空格數(shù)是可變的,但是同一個(gè)代碼塊的語句必須包含相同的縮進(jìn)空格數(shù)。
Python第三方包的安裝方式較多,本書建議采用以下方式進(jìn)行安裝和管理:
(1)在CMD命令窗口中,使用conda命令進(jìn)行自動(dòng)下載安裝,用法如下:
conda install <包名稱列表> #安裝包
conda remove <包名稱列表> #卸載包
conda search<搜索項(xiàng)> #搜索包
conda list #查看所有包
conda update<包名稱> #升級(jí)包
(2)在CMD命令窗口中使用pip命令,用法如下:
pip install <包名> #安裝包
pip install--upgrade <包名> #更新包
pip uninstall <包名> #刪除包
也可以在 Jupyter notebook 的cell中運(yùn)行pip命令執(zhí)行相應(yīng)的命令,只需在命令前加“!”,如執(zhí)行 !pip install 包名 進(jìn)行包的安裝。
按 esc 鍵切換為命令模式,按 enter 鍵進(jìn)入編輯模式
NumPy是在1995年誕生的Python庫 Numeric 的基礎(chǔ)上建立起來的,但真正促使NumPy的發(fā)行的是Python的SciPy庫。 但SciPy中并沒有合適的類似于Numeric中的對(duì)于基礎(chǔ)數(shù)據(jù)對(duì)象處理的功能 。于是,SciPy的開發(fā)者將SciPy中的一部分和Numeric的設(shè)計(jì)思想結(jié)合,在2005年發(fā)行了NumPy。
NumPy是Python的一種開源的數(shù)值計(jì)算擴(kuò)展庫。它包含很多功能,如 創(chuàng)建n維數(shù)組(矩陣)、對(duì)數(shù)組進(jìn)行函數(shù)運(yùn)算、數(shù)值積分 等。 NumPy的誕生彌補(bǔ)了這些缺陷,它提供了兩種基本的對(duì)象:
通常來說,ndarray是一個(gè)通用的同構(gòu)數(shù)據(jù)容器,即其中的所有元素都需要相同的類型。利用array函數(shù)可創(chuàng)建ndarray數(shù)組。
在NumPy.random模塊中,提供了多種隨機(jī)數(shù)的生成函數(shù)。如randint函數(shù)生成指定范圍的隨機(jī)整數(shù)來構(gòu)成指定形狀的數(shù)組。
np.random.randint(low, high=None, size=None)
random模塊的常用隨機(jī)數(shù)生成函數(shù):
np.reshape(a, newshape, order='C')
數(shù)據(jù)重塑不會(huì)改變?cè)瓉淼臄?shù)組.
數(shù)組的切片返回的是原始數(shù)組的視圖,不會(huì)產(chǎn)生新的數(shù)據(jù),如果需要的并非視圖而是要復(fù)制數(shù)據(jù),則可以通過 copy 方法實(shí)現(xiàn)。
廣播(broadcasting)是指不同形狀的數(shù)組之間執(zhí)行算術(shù)運(yùn)算的方式。
w=np.array([2,5,6,3,10])
np.where(w>4)
(array([1, 2, 4], dtype=int64),)
where中 若只有條件 (condition),沒有x和y,則輸出滿足條件元素的 坐標(biāo) 。這里的坐標(biāo)以tuple的形式給出,通常原數(shù)組有多少維,輸出的tuple中就包含幾個(gè)數(shù)組,分別對(duì)應(yīng)符合條件元素的各維坐標(biāo)。
Sort函數(shù)對(duì)數(shù)據(jù)直接進(jìn)行排序, 調(diào)用改變?cè)紨?shù)組 ,無返回值。
arr=np.array([7,9,5,2,9,4,3,1,4,3])
print('原數(shù)組:',arr)
print('排序后:',arr.argsort())
#返回值為數(shù)組排序后的下標(biāo)排列
print('顯示較大的5個(gè)數(shù):',arr[arr.argsort()][-5:])
原數(shù)組: [7 9 5 2 9 4 3 1 4 3]
排序后: [7 3 6 9 5 8 2 0 1 4]
顯示較大的5個(gè)數(shù): [4 5 7 9 9]
a=[1,5,1,4,3,4,4]
b=[9,4,0,4,0,2,1]
# 先按照a排序,如果a有相同的數(shù)按照b排序
ind=np.lexsort((b,a)) #sort by a,then by b
print('ind:',ind)
tmp=[(a[i],b[i])for i in ind]
print('tmp:',tmp)
ind: [2 0 4 6 5 3 1]
tmp: [(1, 0), (1, 9), (3, 0), (4, 1), (4, 2), (4, 4), (5, 4)]
NumPy中提供了很多用于統(tǒng)計(jì)分析的函數(shù),常見的有 sum、mean、std、var、min和max 等。
Numpy中數(shù)組的方法sort、argsort和lexsort分別是指 ___、 將___和___
直接排序x中的元素從小到大排列,提取其對(duì)應(yīng)的index(索引)對(duì)數(shù)組或列表按照某一行或列進(jìn)行排序
Pandas(Python Data Analysis Library)是基于NumPy的數(shù)據(jù)分析模塊,它提供了大量標(biāo)準(zhǔn)數(shù)據(jù)模型和高效操作大型數(shù)據(jù)集所需的工具, 可以說Pandas是使得Python能夠成為高效且強(qiáng)大的數(shù)據(jù)分析環(huán)境的重要因素之一 。
Pandas有三種數(shù)據(jù)結(jié)構(gòu):Series、DataFrame和Panel。
DataFrame的屬性
data.rename(columns=({
'total_bill':'消費(fèi)總額','tip':'小費(fèi)','sex':'性別','smoker':'是否抽煙',
'day':'星期','time':'聚餐時(shí)間段','size':'人數(shù)'}),inplace=True)
fdata['是否抽煙']===fdata.是否抽煙
data.query( '是否抽煙=="Yes" & 性別=="Male" & 人均消費(fèi)>15')
data.dropna(subset=['性別','聚餐時(shí)間段'],inplace=True)
data.isnull().sum()
df.apply(np.mean)
data.dpplymap(lambda x:'%.3f'%x)
對(duì)于DataFrame數(shù)據(jù)排序,通過指定軸方向,使用 sort_index 函數(shù)對(duì)行或列索引進(jìn)行排序。如果要進(jìn)行列排序,則通過 sort_values 函數(shù)把列名傳給by參數(shù)即可。
df.sum() # 按列進(jìn)行求和
df.sum(axis=1) # 按行進(jìn)行求和
利用 describe 方法會(huì)對(duì)每個(gè)數(shù)值型的列數(shù)據(jù)進(jìn)行統(tǒng)計(jì)
Pandas中常用的描述性統(tǒng)計(jì)量:
對(duì)于類別型特征的描述性統(tǒng)計(jì),可以使用頻數(shù)統(tǒng)計(jì)表。Pandas庫中通過unique方法獲取不重復(fù)的數(shù)組,利用value_counts方法實(shí)現(xiàn)頻數(shù)統(tǒng)計(jì)。
groupby方法的參數(shù)及其說明:
data.groupby(data.map(judge)),sum()
使用agg方法聚合數(shù)據(jù)
數(shù)據(jù)透視表(Pivot Table)是數(shù)據(jù)分析中常見的工具之一,根據(jù)一個(gè)或多個(gè)鍵值對(duì)數(shù)據(jù)進(jìn)行聚合,根據(jù)列或行的分組鍵將數(shù)據(jù)劃分到各個(gè)區(qū)域。
pivot_table 函數(shù)格式:
pivot_table(data, values=None, index=None, columns=None,
aggfunc='mean', fill_value=None, margins=False,
dropna=True, margins_name='All')
交叉表是一種特殊的透視表,主要用于計(jì)算分組頻率。
crosstab(index, columns, values=None,
rownames=None, colnames=None,
aggfunc=None,
margins=False, dropna=True, normalize=False)
對(duì)于數(shù)據(jù)分析而言,數(shù)據(jù)大部分來源于外部數(shù)據(jù),如常用的CSV文件、Excel文件和數(shù)據(jù)庫文件等。Pandas庫將外部數(shù)據(jù)轉(zhuǎn)換為DataFrame數(shù)據(jù)格式,處理完成后再存儲(chǔ)到相應(yīng)的外部文件中。
文本文件是一種由若干行字符構(gòu)成的計(jì)算機(jī)文件,它是一種典型的順序文件。
pandas.read_table(filepath_or_buffer, sep=’\t’,
header=’infer’, names=None, index_col=None,
dtype=None, engine=None, nrows=None)
pandas.read_csv(filepath_or_buffer, sep=’,’,
header=’infer’, names=None, index_col=None,
dtype=None, engine=None, nrows=None)
2. 文本文件的存儲(chǔ)
DataFrame.to_csv(path_or_buf=None, sep=’,’, na_rep,
columns=None, header=True, index=True, index_label=None,
mode=’w’, encoding=None)
pandas.read_excel(io, sheetname, header=0,
index_col=None, names=None, dtype)
JSON(JavaScript Object Notation) 數(shù)據(jù)是一種輕量級(jí)的數(shù)據(jù)交換格式,因其簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使其成為了理想的數(shù)據(jù)交換語言。JSON數(shù)據(jù)使用大括號(hào)來區(qū)分表示并存儲(chǔ)。
Pandas通過read_json函數(shù)讀取JSON數(shù)據(jù)。讀取代碼如下:
import pandas as pd
df=pd.read_json(‘FileName’)
df=df.sort_index
Pandas使用 pd.to_json 實(shí)現(xiàn)將DataFrame數(shù)據(jù)存儲(chǔ)為JSON文件。
import pandas as pd
import MySQLdb
conn=MySQLdb.connect(host=host,port=port,user=username,passwd=password,db=db_name)
df=pd.read_sql('select * from table_name',con=conn) conn.close()
import pandas as pd
import pymssql
conn=pymssql.connect(host=host, port=port ,user=username, password=password, database=database)
df=pd.read_sql("select * from table_name",con=conn) conn.close()
merge函數(shù)是通過一個(gè)或多個(gè)鍵將兩個(gè)DataFrame按行合并起來,與SQL中的 join 用法類似,Pandas中的數(shù)據(jù)合并merge( )函數(shù)格式如下:
merge合并時(shí)默認(rèn)是 內(nèi)連接 (inner),即返回交集。通過how參數(shù)可以選擇連接方法:左連接(left),右連接(right)和外連接(outer)。
在合并時(shí)會(huì)出現(xiàn)重復(fù)列名,雖然可以人為進(jìn)行重復(fù)列名的修改,但 merge 函數(shù)提供了 suffixes 用于處理該問題:
如果要合并的 DataFrame 之間沒有連接鍵,就無法使用merge方法。pandas中的concat方法可以實(shí)現(xiàn),默認(rèn)情況下會(huì)按行的方向堆疊數(shù)據(jù)。如果在列向上連接設(shè)置axies=1即可。
如果需要合并的兩個(gè)DataFrame存在重復(fù)索引,則使用merge和concat都無法正確合并,此時(shí)需要使用combine_first方法。
填充缺失值
缺失值所在的特征為數(shù)值型時(shí),通常利用其均值、中位數(shù)和眾數(shù)等描述其集中趨勢(shì)的統(tǒng)計(jì)量來填充;缺失值所在特征為類別型數(shù)據(jù)時(shí),則選擇眾數(shù)來填充。
在DataFrame中利用duplicates方法判斷各行是否有重復(fù)數(shù)據(jù)。 duplicates 方法返回一個(gè)布爾值的series,反映每一行是否與之前的行重復(fù)。
Pandas通過drop_duplicates刪除重復(fù)的行,格式為:
drop_duplicates(self, subset=None, keep=’first’, inplace=False)
簡(jiǎn)單的數(shù)據(jù)統(tǒng)計(jì)方法中常用散點(diǎn)圖、箱線圖和3σ法則檢測(cè)異常值。
箱線圖利用數(shù)據(jù)中的五個(gè)統(tǒng)計(jì)量(最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)和最大值)來描述數(shù)據(jù),它也可以粗略地看出數(shù)據(jù)是否具有對(duì)稱性、分布的分散程度等信息。
若數(shù)據(jù)服從正態(tài)分布,在3σ原則下,異常值被定義為一組測(cè)定值中與平均值的偏差超過3倍標(biāo)準(zhǔn)差的值,因?yàn)樵谡龖B(tài)分布的假設(shè)下,距離平均值3σ之外的值出現(xiàn)的概率小于0.003。因此根據(jù)小概率事件,可以認(rèn)為超出3σ之外的值為異常數(shù)據(jù)。
離差標(biāo)準(zhǔn)化是對(duì)原始數(shù)據(jù)所做的一種線性變換,將原始數(shù)據(jù)的數(shù)值映射到[0,1]區(qū)間。轉(zhuǎn)換公式如下所示。
標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化數(shù)據(jù)
標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化又稱零均值標(biāo)準(zhǔn)化或z分?jǐn)?shù)標(biāo)準(zhǔn)化,是當(dāng)前使用最廣泛的數(shù)據(jù)標(biāo)準(zhǔn)化方法。
啞變量( Dummy Variables)是用以反映質(zhì)的屬性的一個(gè)人工變量,是量化了的自變量,通常取值為0或1。
散點(diǎn)圖 箱線圖分析 3σ法則,
在Jupyter notebook中進(jìn)行交互式繪圖,需要執(zhí)行一下語句 % matplotlib notebook
figure():創(chuàng)建一個(gè)新的繪圖窗口。
figtext():為figure添加文字
axes():為當(dāng)前figure添加一個(gè)坐標(biāo)軸
plot():繪圖函數(shù)
polar():繪制極坐標(biāo)圖
axis():獲取或設(shè)置軸屬性的邊界方法(坐標(biāo)的取值范圍)
clf : 清除當(dāng)前figure窗口 cla : 清除當(dāng)前axes窗口
close : 關(guān)閉當(dāng)前figure窗口
subplot : 一個(gè)圖中包含多個(gè)axes
text(): 在軸上添加文字
title(): 設(shè)置當(dāng)前axes標(biāo)題
xlabel/ylabel:設(shè)置當(dāng)前X軸或Y軸的標(biāo)簽
hist():繪制直方圖
hist2d():繪制二維在直方圖
hold :設(shè)置當(dāng)前圖窗狀態(tài);off或者on
imread():讀取一個(gè)圖像,從圖形文件中提取數(shù)組
legend():為當(dāng)前axes放置標(biāo)簽
pie():繪制餅狀圖
scatter():做一個(gè)X和Y的散點(diǎn)圖,其中X和Y是相同長(zhǎng)度的序列對(duì)象
stackplot():繪制一個(gè)堆疊面積圖
acorr():繪制X的自相關(guān)函數(shù)
annotate():用箭頭在指定的數(shù)據(jù)點(diǎn)創(chuàng)建一個(gè)注釋或一段文本
bar():繪制垂直條形圖 barh():繪制橫向條形圖
barbs():繪制一個(gè)倒鉤的二維場(chǎng)
創(chuàng)建子圖
import matplotlib.pyplot as plt
fig=plt.figure()
#不能使用空白的figure繪圖,需要?jiǎng)?chuàng)建子圖
ax1=fig.add_subplot(2,2,1)
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,3)
可以用語句 Fig , axes=plt.subplots(2,3) 創(chuàng)建一個(gè)新的圖片,然后返回包含了已生成子圖對(duì)象的NumPy數(shù)組。數(shù)組axes可以像二維數(shù)組那樣方便地進(jìn)行索引,如 axes[0,1] 。也可以通過sharex和sharey表明子圖分別擁有相同的x軸和y軸。
fig, axes=plt.subplots(2,3)
調(diào)整子圖周圍的間距: plt.subplots_adjust(wspace=0,hspace=0)
查看matplotlib的rc參數(shù):
import matplotlib as plt
print(plt.rc_params())
常用參數(shù):
Axes:設(shè)置坐標(biāo)軸邊界、顏色、坐標(biāo)
刻度值大小和網(wǎng)格的顯示;
Figure:設(shè)置邊界顏色、圖形大小和子區(qū);
Font:設(shè)置字號(hào)、字體和樣式;
Grid:設(shè)置網(wǎng)格顏色和線型;
Legend:設(shè)置圖例和其中的文本顯示;
Lines:設(shè)置線條顏色、寬度、線型等;
Savefig:對(duì)保存圖像進(jìn)行單獨(dú)設(shè)置;
Xtick和ytick:X、Y軸的主刻度和次刻度設(shè)置顏色、大小、方向和標(biāo)簽大小。
import numpy as np
import matplotlib.pyplot as plt
fig,ax=plt.subplots()
plt.rcParams['font.family']=['SimHei']#用來顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負(fù)號(hào)
調(diào)用函數(shù)fill_between() 實(shí)現(xiàn)曲線下面部分的填充:
plt.fill_between(x, 0, y, facecolor='green', alpha=0.3)
x:第一個(gè)參數(shù)表示覆蓋的區(qū)域, x,表示整個(gè)x都覆蓋
0:表示覆蓋的下限
y:表示覆蓋的上限是y這個(gè)曲線
facecolor:覆蓋區(qū)域的顏色
alpha:覆蓋區(qū)域的透明度[0,1],其值越大,表示越不透明
繪圖時(shí)有時(shí)需要在圖表中加文本注解
這時(shí)可以通過text函數(shù)在指定的位置(x,y)加入文本注解;
通過 annotate() 在指定位置實(shí)現(xiàn)指向型注釋。
箱線圖利用數(shù)據(jù)中的五個(gè)統(tǒng)計(jì)量(最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)和最大值)來描述數(shù)據(jù),它也可以粗略地看出數(shù)據(jù)是否具有對(duì)稱性、分布的分散程度等信息,特別可以用于對(duì)幾個(gè)樣本的比較。
雷達(dá)圖也稱為網(wǎng)絡(luò)圖,星圖,蜘蛛網(wǎng)圖,不規(guī)則多邊形,極坐標(biāo)圖等。雷達(dá)圖是以從同一點(diǎn)開始的軸上表示的三個(gè)或更多個(gè)定量變量的二維圖表的形式顯示多變量數(shù)據(jù)的圖形方法。軸的相對(duì)位置和角度通常是無信息的。雷達(dá)圖相當(dāng)于平行坐標(biāo)圖,軸徑向排列。
(1)WordCloud
(2)jieba
conda install -c conda-forge jieba
(1)首先使用pandas讀取數(shù)據(jù)并將需要分析的數(shù)據(jù)轉(zhuǎn)化為列表;
(2)對(duì)獲得的列表數(shù)據(jù)利用分詞工具jieba進(jìn)行遍歷分詞;
(3)使用WordCloud設(shè)置詞云圖片的屬性、掩碼和停用詞,并生成詞云圖像。
查找到當(dāng)前用戶的配置文件目錄,然后用編輯器打開,修改matplotlibrc文件,即可修改配置參數(shù)。
annotate()
text()
Matplotlib繪圖基本模仿MATLAB繪圖庫,其繪圖風(fēng)格和MATLAB類似。由于MATLAB繪圖風(fēng)格偏古典,因此, Python開源社區(qū)開發(fā)了Seaborn繪圖模塊,對(duì)Matplotlib進(jìn)行封裝,繪圖效果更符合現(xiàn)代人的審美 。
Seaborn屬于Matplotlib的一個(gè)高級(jí)接口,使得作圖更加容易。在多數(shù)情況下使用Seaborn能做出很具吸引力的圖,而使用Matplotlib可以制作具有更多特色的圖。 應(yīng)該把Seaborn視為Matplotlib的補(bǔ)充,而不是替代物 。
Seaborn通過set函數(shù)實(shí)現(xiàn)風(fēng)格設(shè)置繪圖的背景色、風(fēng)格、字型、字體:
seaborn.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1, color_codes=True, rc=None)
Seaborn將matplotlib的參數(shù)劃分為兩個(gè)獨(dú)立的組合。第一組是 設(shè)置繪圖的外觀風(fēng)格 的,第二組主要 將繪圖的各種元素按比例縮放的 ,以至可以嵌入到不同的背景環(huán)境中。控制這些參數(shù)的接口主要有兩對(duì)方法:
despine()控制哪個(gè)脊柱將被移除。
sinplot()
sns.despine(left=True)
除了選用預(yù)設(shè)的風(fēng)格外,可以利用with 語句使用 axes_style() 方法設(shè)置臨時(shí)繪圖參數(shù)。
with sns.axes_style("darkgrid"):
plt.subplot(2,1,1)
sinplot( )
plt.subplot(2,1, 2)
sinplot(-1)
seaborn中通過 set_context() 設(shè)置縮放參數(shù),預(yù)設(shè)的參數(shù)有 paper, notebook, talk, poster 。默認(rèn)為 notebook。“paper”、“talk”和“poster” 。
使用 distplot 方法繪制的直方圖與matplotlib是類似的。在 distplot 的參數(shù)中,可以選擇不繪制密度圖。其中的 rug 參數(shù)繪制 毛毯圖 ,可以為每個(gè)觀測(cè)值繪制小細(xì)線(邊際毛毯),也可以單獨(dú)用 rugplot 進(jìn)行繪制。
如果設(shè)置 hist 為 False ,則可以直接繪制密度圖而沒有直方圖。
sns.distplot(df_iris['Petal.Width'],hist=False,rug=True)
小提琴圖其實(shí)是箱線圖與核密度圖的結(jié)合,箱線圖展示了 分位數(shù) 的位置,小提琴圖則展示了 任意位置的密度 ,通過小提琴圖可以知道哪些位置的密度較高。
在圖中, 白點(diǎn) 是中位數(shù),黑色盒型的范圍是下四分位點(diǎn)到上四分位點(diǎn),細(xì)黑線表示須。 外部形狀即為核密度估計(jì) (在概率論中用來估計(jì)未知的密度函數(shù),屬于非參數(shù)檢驗(yàn)方法之一)。
sns.set_style("whitegrid")
df_iris=pd.read_csv('D:\dataset\iris.csv')
ax=sns.violinplot(x=df_iris['Petal.Length'])
sns.jointplot(x='Petal.Length',y='Petal.Width' ,data=df_iris,kind='kde')
sns.regplot(x='舉手次數(shù)',y='討論次數(shù)',order=4,data=df)
熱力圖是數(shù)據(jù)可視化項(xiàng)目中比較常用的數(shù)據(jù)顯示方式。 熱力圖通過顏色變化程度直觀反應(yīng)出熱點(diǎn)分布,區(qū)域聚集等數(shù)據(jù)信息 。熱力圖實(shí)現(xiàn)過程就是通過簡(jiǎn)單的數(shù)學(xué)變化,將離散的點(diǎn)信息映射為圖像。
簡(jiǎn)述Seaborn繪圖風(fēng)格設(shè)置的內(nèi)容和方法
Seaborn通過set函數(shù)實(shí)現(xiàn)風(fēng)格設(shè)置。
seaborn.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1, color_codes=True, rc=None)
pyecharts是基于Echart圖表的一個(gè)類庫,而Echart是百度開源的一個(gè)可視化 JavaScript 庫。
pyecharts主要基于web瀏覽器進(jìn)行顯示,繪制的圖形比較多,包括 折線圖、柱狀圖、餅圖、漏斗圖、地圖、極坐標(biāo)圖 等,代碼量很少,而且很靈活,繪制出來的圖形很美觀。
圖形繪制過程,基本上所有的圖表類型都是這樣繪制的:
chart_name=Type() #初始化具體類型圖表
chart_name.add() #添加數(shù)據(jù)及配置項(xiàng)
chart_name.render()
#生成本地文件(html/svg/jpeg/png/pdf/gif)
chart_name .render_notebook #在jupyter notebook中顯示
pyecharts 中通過 Funnel 繪制漏斗圖,
儀表盤
平行坐標(biāo)圖(Parallel Coordinates Plot)是對(duì)于具有多個(gè)屬性問題的一種可視化方法。在平行坐標(biāo)圖中,數(shù)據(jù)集的一行數(shù)據(jù)在平行坐標(biāo)圖中用一條折線表示,縱向是 屬性值 ,橫向是 屬性類別 (用索引表示)
桑基圖(Sankey diagram)即 桑基能量分流圖 ,也叫桑基能量平衡圖。它是一種特定類型的流程圖,圖中延伸的分支的寬度對(duì)應(yīng)數(shù)據(jù)流量的大小,通常應(yīng)用于能源、材料成分、金融等數(shù)據(jù)的可視化分析。 Pyecharts 中利用 Sankey 繪制桑基圖。
簡(jiǎn)述pyecharts中圖表繪制的步驟。
chart_name=Type() #初始化具體類型圖表
chart_name .add() #添加數(shù)據(jù)及配置項(xiàng)
chart_name .render()
#生成本地文件(保存路徑)
chart_name .render_notebook #在jupyter notebook中顯示
Python標(biāo)準(zhǔn)庫中包含了用于日期(date)、時(shí)間(time)、日歷(calendar)等功能的數(shù)據(jù)類型,主要會(huì)用到datetime、time、calendar模塊,我們主要介紹一下datetime模塊。
time=datetime.time(10,20,15)
print(time)
print(time.hour,time.minute,time.second)
Datetime類數(shù)據(jù)是date類和time類數(shù)據(jù)的組合,通過now函數(shù)可以查看當(dāng)前的時(shí)間。
重采樣是時(shí)間序列頻率轉(zhuǎn)換的過程,Pandas中的resample函數(shù)用于各種頻率的轉(zhuǎn)換工作。
在做 時(shí)間序列分析 時(shí),經(jīng)常要對(duì)時(shí)間序列進(jìn)行平穩(wěn)性檢驗(yàn)。用Python來進(jìn)行 平穩(wěn)性檢驗(yàn) 主要有 時(shí)序圖檢驗(yàn)、自相關(guān)圖檢驗(yàn)以及構(gòu)造統(tǒng)計(jì)量進(jìn)行檢驗(yàn) 3種方法
時(shí)序圖就是普通的時(shí)間序列圖,即以時(shí)間為橫軸,觀察值為縱軸進(jìn)行檢驗(yàn)。利用時(shí)序圖可以粗略觀察序列的平穩(wěn)性。
2 自相關(guān)圖檢驗(yàn)
平穩(wěn)序列通常具有短期相關(guān)性,即隨著延遲期數(shù)k的增加,平穩(wěn)序列的自相關(guān)系數(shù)會(huì)很快地衰減向零,而非平穩(wěn)序列的自相關(guān)系數(shù)的衰減速度會(huì)比較慢。畫自相關(guān)圖用到的是 statsmodels 中的 plot_acf 方法。自相關(guān)圖中橫軸表示延遲期數(shù),縱軸表示自相關(guān)系數(shù)。
3. 利用繪圖判斷序列的平穩(wěn)性比較直觀,但不夠精確,ADF(Augmented Dickey-Fuller)法直接通過 假設(shè)檢驗(yàn) 的方式來驗(yàn)證平穩(wěn)性。ADF的原假設(shè)(H0)和備擇假設(shè)(H1)如下:
Python中可以使用 statsmodels 中的 adfuller 方法進(jìn)行ADF檢驗(yàn),直接輸入數(shù)據(jù),即可返回7個(gè)數(shù)值。
其中的第一個(gè)返回值adf就是ADF方法的檢驗(yàn)結(jié)果,這個(gè)值理論上越負(fù)越能拒絕原假設(shè);
第二個(gè)返回值pvalue以常用的判斷標(biāo)準(zhǔn)值0.05作為參考,若其值大于0.05,說明支持原假設(shè),反之拒絕原假設(shè),表明該序列是一個(gè)平穩(wěn)序列。
若其值大于0.05,說明支持原假設(shè),反之拒絕原假設(shè),表明該序列是一個(gè)平穩(wěn)序列。
Scipy是一款用于數(shù)學(xué)、科學(xué)和工程領(lǐng)域的Python工具包,可以處理插值、積分、優(yōu)化、圖像處理、常微分方程數(shù)值解的求解、信號(hào)處理等問題。
SciPy的constants模塊包含了大量用于科學(xué)計(jì)算的常數(shù)。
from scipy import constants as C
print(C.pi) #圓周率
print(C.golden) #黃金比例
print(C.c) #真空中的光速
print(C.h) #普朗克常數(shù)
print(C.mile) #一英里等于多少米
print(C.inch) #一英寸等于多少米
print(C.degree) #一度等于多少弧度
print(C.minute) #一分鐘等于多少秒
print(C.g) #標(biāo)準(zhǔn)重力加速度
SciPy的special模塊包含了大量函數(shù)庫,包括基本數(shù)學(xué)函數(shù)、特殊函數(shù)以及NumPy中的所有函數(shù)。
from scipy import special as S
print(S.cbrt(8)) #立方根
print(S.exp10(3)) #10**3
print(S.sindg(90)) #正弦函數(shù),參數(shù)為角度
print(S.round(3.1)) #四舍五入函數(shù)
print(S.round(3.5))
print(S.round(3.499))
print(S.comb(5,3))
#從5個(gè)中任選3個(gè)的組合數(shù)
print(S.perm(5,3)) #排列數(shù)
print(S.gamma(4)) #gamma函數(shù)
print(S.beta(10,200)) #beta函數(shù)
print(S.sinc(0)) #sinc函數(shù)
SciPy.linalg 是SciPy中實(shí)現(xiàn)線性代數(shù)計(jì)算的模塊,常用的導(dǎo)入方式為: from scipy import linalg
在NumPy中,矩陣有矩陣類型和二維數(shù)組兩種表示方法。
矩陣類型數(shù)據(jù)可以用 np.mat() 或 mat.matrix() 創(chuàng)建。
from scipy import linalg
import numpy as np
A=np.mat('[1,2;3,4]')
print('A矩陣為:\n',A)
print('A的轉(zhuǎn)置矩陣為:\n',A.T)
print('A的逆矩陣為:\n',A.I)
矩陣也可以用二維數(shù)組對(duì)象表示,數(shù)組對(duì)象的矩陣操作與矩陣對(duì)象有一定的區(qū)別。
M=np.array([[1,2],[3,4]])
print('M矩陣為:\n',M)
print('M的轉(zhuǎn)置矩陣為:\n',M.T)
print('M的逆矩陣為:\n',linalg.inv(M))
除了通過矩陣的逆求解外可以直接使用 linalg.solve() 函數(shù)求解而且效率更高。
from scipy import linalg
import numpy as np
a=np.array([[1, 3, 5], [2, 5, -1], [2, 4, 7]])
b=np.array([10, 6, 4])
x=linalg.solve(a, b)
print(x)
[-14.31578947 7.05263158 0.63157895]
行列式是一個(gè)將方陣映射到標(biāo)量的函數(shù)。linalg.det()可以計(jì)算矩陣的行列式。
M=np.array([[1,2],[3,4]])
linalg.det(M)
-2.0
范數(shù)是數(shù)學(xué)上一個(gè)類似“長(zhǎng)度”的概念。 linalg.norm() 函數(shù)可以計(jì)算向量或矩陣的范數(shù)(或者模)。常見范數(shù)及其含義見下表。
M=np.array([[1,2],[3,4]])
print('M矩陣為:\n',M)
print('M矩陣的L范數(shù)為:\n',linalg.norm(M,1)) # 6.0
print('M矩陣的2范數(shù)為:\n',linalg.norm(M,2))
函數(shù) linalg.eig() 可以用來求解特征值和特征向量。
A=np.array([[1,2],[3,4]])
l,v=linalg.eig(A)
print(l)
print(v)
[-0.37228132+0.j 5.37228132+0.j]
[[-0.82456484 -0.41597356]
[ 0.56576746 -0.90937671]]
奇異值分解是一個(gè)能適用于任意的矩陣的一種分解的方法。
scikit-learn的PCA算法的背后真正的實(shí)現(xiàn)就是用的SVD。
from numpy import *
data=mat([[1,2,3],[4,5,6]])
U,sigma,VT=np.linalg.svd(data)
print('U: ',U)
print('SIGMA:',sigma)
print('VT:',VT)
SciPy.optimize 包提供了幾種常用的優(yōu)化算法,包括用來求有/無約束的多元標(biāo)量函數(shù)最小值算法,最小二乘法,求有/無約束的單變量函數(shù)最小值算法,還有解各種復(fù)雜方程的算法。
使用 SciPy.optimize 模塊的root和fsolve函數(shù)進(jìn)行數(shù)值求解線性及非線性方程求方程的根。
from scipy.optimize import root
def func(x):
return x*2 + 2 * np.cos(x)
sol=root(func, 0.3)
# 0.3 估計(jì)初始值
print (sol)
使用 fmin,fminbound 可以求函數(shù)的極值:
import numpy as np
from matplotlib import pyplot as plt
from SciPy.optimize import fmin,fminbound
def f(x):
return x**2+10*np.sin(x)+1
x=np.linspace(-10,10,num=500)
min1=fmin(f,3) #求3附近的極小值
min2=fmin(f,0) #求0附近的極小值
min_global=fminbound(f,-10,10)
#這個(gè)區(qū)域的最小值
print(min1)
print(min2)
print(min_global)
plt.plot(x,f(x))
plt.show()
import matplotlib.pyplot as plt
x=np.linspace(-5,5,20)
y=3.5*x+2.1
y_noise=y+np.random.randn(20)*2
coeff=np.polyfit(x,y_noise,1)
plt.plot(x,y_noise,'x',x,coeff[0]*x+coeff[1])
plt.show()
最小二乘擬合
最小二乘擬合(Least Squares)是一種常用的數(shù)學(xué)優(yōu)化技術(shù),通過最小化誤差的平方和在尋找一個(gè)與數(shù)據(jù)匹配的最佳函數(shù)。
要使用最小二乘優(yōu)化,需要先定義誤差函數(shù):
def errf(p,x,y):
return y-func(x,*p)
其中,p表示要估計(jì)的真實(shí)參數(shù),x是函數(shù)的輸入,y表示輸入對(duì)應(yīng)的數(shù)據(jù)值。最小二乘估計(jì)對(duì)應(yīng)的函數(shù)為 optimize.leastsq() ,可以利用該函數(shù)和定義的誤差函數(shù),對(duì)真實(shí)參數(shù)進(jìn)行最小二乘估計(jì)。
from scipy import optimize
def myfunc(x,a,b,w,t):
return a*np.exp(-b*np.sin(w*x+t))
x=np.linspace(0,2*np.pi)
par=[3,2,1.25,np.pi/4]
y=myfunc(x,*par)
y_noise=y+0.8*np.random.randn(len(y))
def errf(p,x,y):
return y-myfunc(x,*p)
c,rv=optimize.leastsq(errf,[1,1,1,1],args=(x,y_noise))
#c返回找到的最小二乘估計(jì)
plt.plot(x,y_noise,'x',x,y,x,myfunc(x,*c),':')
plt.legend(['data','actual','leastsq'])
plt.show()
曲線擬合
可以不定義誤差函數(shù),用函數(shù) optimize.curve_fit() 直接對(duì)函數(shù)myfunc的參數(shù)直接進(jìn)行擬合。
p,e=optimize.curve_fit(myfunc,x,y_noise)
print('p是對(duì)參數(shù)的估計(jì)值:\n',p)
print('e是4個(gè)估計(jì)參數(shù)的協(xié)方差矩陣:\n',e)
p是對(duì)參數(shù)的估計(jì)值:
[3.28292536 1.90102739 1.2478838 0.78989363]
e是4個(gè)估計(jì)參數(shù)的協(xié)方差矩陣:
[[ 0.17453746 -0.05248031 0.01959142 -0.06158022]
[-0.05248031 0.01606779 -0.00572988 0.01801028]
[ 0.01959142 -0.00572988 0.00271714 -0.00854062]
[-0.06158022 0.01801028 -0.00854062 0.02707182]]
稀疏矩陣(Sparse Matrix)是 只有少部分元素值是非零的矩陣 。如果按照正常方式存儲(chǔ)所有元素,則這些矩陣將占用巨大空間,因此,稀疏矩陣只保存非零值及對(duì)應(yīng)的位置。
SciPy.sparse 是SciPy中負(fù)責(zé)稀疏矩陣的模塊。在SciPy中,根據(jù)存儲(chǔ)方式的不同,可以將稀疏矩陣分為以下幾類:
由于稀疏矩陣數(shù)據(jù)量大,一般不使用普通矩陣作為參數(shù)來構(gòu)建,而是采用非零數(shù)據(jù)點(diǎn)及坐標(biāo)的形式構(gòu)建。
import numpy as np
from scipy import sparse
sparse.coo_matrix((2,3)) #創(chuàng)建空的稀疏矩陣
A=sparse.coo_matrix([[1,2,0],[0,1,0],[2,0,0]])
#將普通矩陣轉(zhuǎn)為稀疏矩陣
print(A)
print(type(A)) #查看A的類型
print(type(A.tocsc())) #不同類型的稀疏矩陣可以相互轉(zhuǎn)換
v=np.array([1,3,-3])
print(A*v)
data=[1,2,3,4]
rows=[0,0,1,2]
cols=[0,1,2,2]
W=sparse.coo_matrix(data,(rows,cols))
print('稀疏矩陣W:\n',W)
r,c,d=sparse.find(W)
#find()函數(shù)返回非零元素的行、列和具體數(shù)值
print('稀疏矩陣W非零值:\n',r,c,d)
稀疏矩陣W:
(0, 0) 1
(0, 1) 2
(0, 2) 3
(0, 3) 4
稀疏矩陣W非零值:
[0 0 0 0] [0 1 2 3] [1 2 3 4]
簡(jiǎn)單的介紹一下SciPy在圖像處理方面的應(yīng)用,如果專業(yè)做圖像處理當(dāng)然還是建議使用OpenCV。
圖像平滑是指用于突出圖像的寬大區(qū)域、低頻成分、主干部分或抑制圖像噪聲和干擾高頻成分,使圖像亮度平緩漸變,減小突變梯度,改善圖像質(zhì)量的圖像處理方法。
圖像平滑的方法包括:插值方法,線性平滑方法,卷積法等。
ndimage.median_filter 實(shí)現(xiàn)中值濾波。
import numpy as np
from scipy import ndimage
from scipy import misc
import matplotlib.pyplot as plt
%matplotlib inline
image=misc.ascent()
aa=plt.subplot(1,3,1)
plt.title("title")
plt.imshow(image)
plt.axis('off')
plt.subplot(1,3,2)
plt.title("medi_filter")
filter=ndimage.median_filter(image,size=10)
#使用SciPy的中值濾波處理圖片
plt.imshow(filter)
plt.axis('off')
plt.subplot(1,3,3)
plt.title("gausfilter")
blurred_face=ndimage.gaussian_filter(image, sigma=7)
#高斯濾波
plt.imshow(blurred_face)
plt.axis('off')
圖像旋轉(zhuǎn)和銳化
圖像銳化就是補(bǔ)償圖像的輪廓,增強(qiáng)圖像的邊緣及灰度跳變的部分,使圖像變得清晰。圖像銳化處理的目的是 為了使圖像的邊緣、輪廓線以及圖像的細(xì)節(jié)變的清晰 。經(jīng)過平滑的圖像變得模糊的根本原因是因?yàn)閳D像受到了平均或積分運(yùn)算,因此可以對(duì)其進(jìn)行逆運(yùn)算(如微分運(yùn)算)就可以使圖像變的清晰。從頻域來考慮,圖像模糊的實(shí)質(zhì)是因?yàn)槠涓哳l分量被衰減,因此可以用 高通濾波器來使圖像清晰 。
image=misc.ascent()
#顯示全部圖片
plt.subplot(131)
plt.title("title")
plt.imshow(image)
plt.axis('off')
plt.subplot(132)
rotate=ndimage.rotate(image,60)
plt.title("rotate")
plt.imshow(rotate)
plt.axis('off') #邊緣檢測(cè)
plt.subplot(133)
prewitt=ndimage.prewitt(image)
plt.title("prewitt")
plt.imshow(prewitt)
plt.axis('off')
信號(hào)處理(signal processing)是指對(duì)信號(hào)進(jìn)行提取、變換、分析、綜合等處理,以便抽取出有用信息的過程。信號(hào)處理基本的內(nèi)容有變換、濾波、調(diào)制、解調(diào)、檢測(cè)以及譜分析和估計(jì)等。
Python中的 scipy.signal 模塊專門用于信號(hào)處理。
重采樣指將數(shù)據(jù)序列從一個(gè)頻率轉(zhuǎn)化為另一個(gè)頻率進(jìn)行處理的過程。將高頻率數(shù)據(jù)轉(zhuǎn)化為低頻率數(shù)據(jù)為降采樣,低頻率轉(zhuǎn)化為高頻率為升采樣。SciPy中的 signal.resample() 函數(shù)可以將信號(hào)重采樣成n個(gè)點(diǎn)。
卷積是兩個(gè)變量在某范圍內(nèi)相乘后求和的結(jié)果。一維卷積常用于序列模型,如自然語言處理領(lǐng)域。二維卷積常用于計(jì)算機(jī)視覺、圖像處理領(lǐng)域。
卷積是兩個(gè)變量在某范圍內(nèi)相乘后求和的結(jié)果。一維卷積常用于序列模型,如自然語言處理領(lǐng)域。二維卷積常用于計(jì)算機(jī)視覺、圖像處理領(lǐng)域。
信號(hào)的表示是信息分析與處理的核心問題之一。在信號(hào)分析中,最基本的變量是時(shí)間和頻率。
信號(hào)一般用時(shí)間作為自變量表示,通過時(shí)頻變換,信號(hào)也可以使用頻率作為自變量表示。常用的變換方法有傅里葉變換、小波變換等。
SciPy中利用 fft 方法將信號(hào)從時(shí)域變換到頻率,用 ifft 方法 將頻域信號(hào)逆變換回時(shí)域 。
數(shù)據(jù)擬合的方法: 多項(xiàng)式擬合,最小二乘擬合,曲線擬合
歐式距離distance的代碼:
np.sqrt(np.sum((a-b)**2))
np.hstack((a,b))
每一行中的最大值的代碼。
np.max(array,axis=0)
第二大值的代碼(默認(rèn)升序排序)
np.unique(array)[-2]
ndmin shape
numpy 維數(shù) 維度
pandas 維度 形狀
Pandas的plot繪制直方圖時(shí),kind取值為hist
密度 kde
散點(diǎn) scatter
Pandas通過 DataFrame.rename() 函數(shù),傳入需要修改列名的字典形式來修改列名。replace進(jìn)行數(shù)據(jù)的替換
Pandas要讀取Mysql中的數(shù)據(jù),首先要安裝 MySQLdb 包
Pandas讀取SQL sever中的數(shù)據(jù),首先要安裝 pymssql 包
Matplotlib配置了配色方案和默認(rèn)設(shè)置。有兩種方式可以設(shè)置參數(shù),即 全局參數(shù)定制 和 rc參數(shù)設(shè)置方法
Matplotlib中繪圖時(shí)的參數(shù)alpha用于設(shè)置點(diǎn)的透明度。
Seaborn中可以通過 despine 方法移除繪圖上方和右方坐標(biāo)上不需要的邊框。
在Seaborn中利用 pairplot() 實(shí)現(xiàn)數(shù)據(jù)特征的兩兩對(duì)比。
pyecharts中通過 Funnel 繪制漏斗圖。
pyecharts利用 Kline 繪制K線圖
pyecharts利用 Gauge 繪制儀表盤。
pyecharts中利用 Sankey 繪制桑基圖。
Scipy中的 constants 模塊包含大量用于科學(xué)計(jì)算的常數(shù)。
var函數(shù)用作方差統(tǒng)計(jì)
使用 rcdefault() 函數(shù)可以將配置文件重置。
處理數(shù)據(jù)缺陷的常用方法 dropna fillna isnull或 notnull
加油!
感謝!
努力!
avaScript 語言中有兩種比較方式,轉(zhuǎn)換類型比較運(yùn)算符==和嚴(yán)格比較運(yùn)算符===。其中嚴(yán)格比較運(yùn)算符僅當(dāng)兩個(gè)操作數(shù)的類型相同且值相等時(shí)才為true。而轉(zhuǎn)換類型比較運(yùn)算符==會(huì)在進(jìn)行比較之前,將兩個(gè)操作數(shù)轉(zhuǎn)換成相同的類型,再來比較。
比較運(yùn)算符常用語邏輯語句中,它主要是用語判定變量或者值是否相等。
相等運(yùn)算符==會(huì)為兩個(gè)不同類型的操作數(shù)轉(zhuǎn)換類型,然后進(jìn)行嚴(yán)格比較。
示例:
console.log(1==1); // true
console.log(1==2); // false
console.log(1==true); // true
console.log(1=='1'); // true
從上述代碼中的1=='1',輸出結(jié)果為 true,就可以看出==相等運(yùn)算符,在對(duì)兩個(gè)操作數(shù)進(jìn)行比較之前,會(huì)將兩個(gè)操作數(shù)轉(zhuǎn)換成相同的類型。
當(dāng)使用比較運(yùn)算符時(shí),如果其中有布爾類型的操作數(shù),值為 true時(shí)會(huì)轉(zhuǎn)換為1,值為false時(shí)會(huì)轉(zhuǎn)換為0。
當(dāng)兩個(gè)操作數(shù)都是對(duì)象時(shí),JavaScript會(huì)比較其內(nèi)部引用,當(dāng)且僅當(dāng)他們的引用指向內(nèi)存中的相同對(duì)象時(shí)才相等,即他們?cè)跅?nèi)存中的引用地址相同。
嚴(yán)格相等運(yùn)算符===不會(huì)對(duì)操作數(shù)進(jìn)行類型轉(zhuǎn)換,只有當(dāng)值相等并且類型也是相等時(shí)才會(huì)返回 true。
示例:
console.log(1===1); // true
console.log(1===2); // false
console.log(1===true); // false
console.log(1===false); // false
console.log(1==='1'); // false
從a===c d的比較結(jié)果可以看出,不同類型的值進(jìn)行比較時(shí),會(huì)返回 false。
不等運(yùn)算符 !=只有當(dāng)操作數(shù)不相等時(shí)才返回true,如果兩操作數(shù)不是同一類型,會(huì)將操作數(shù)轉(zhuǎn)為同意類型再進(jìn)行比較。
示例:
var a=1;
var b=2;
var c='1';
console.log(a !=1); // false
console.log(a !=b); // true
console.log(a !=c); // false
如果兩操作數(shù)為對(duì)象類型,JavaScript會(huì)比較其內(nèi)部引用地址,僅當(dāng)他們?cè)趦?nèi)存中引用不同對(duì)象時(shí)不相等。
嚴(yán)格不等運(yùn)算符 !==當(dāng)操作數(shù)不相等或不同類型時(shí)返回 true。
示例:
var a=1;
var b=2;
var c='1';
console.log(a !==1); // false
console.log(a !==b); // true
console.log(a !==c); // true
大于運(yùn)算符 > ,只有當(dāng)左操作數(shù)大于右操作數(shù)時(shí)才返回 true。
示例:
console.log(5 > 1); // true
console.log(5 > 10); // false
console.log(5 > '5'); // false
大于等于運(yùn)算符 >=,只有當(dāng)左操作數(shù)大于或者等于右操作數(shù)時(shí)才返回 true。
示例:
console.log(5 >=1); // true
console.log(5 >=5); // true
console.log(5 >=10); // false
console.log(5 >='5'); // true
小于運(yùn)算符 < ,只有當(dāng)左操作數(shù)小于右操作數(shù)時(shí)才返回 true。
示例:
console.log(5 < 1); // false
console.log(5 < 5); // false
console.log(5 < 10); // true
console.log(5 < '5'); // false
小于運(yùn)算符 < ,只有當(dāng)左操作數(shù)小于或者等于右操作數(shù)時(shí)才返回 true。
示例:
console.log(5 <=1); // false
console.log(5 <=5); // true
console.log(5 <=10); // true
console.log(5 <='5'); // true
當(dāng)比較運(yùn)算涉及類型轉(zhuǎn)換時(shí),JavaScript 會(huì)按以下規(guī)則對(duì)字符串、數(shù)字、布爾、對(duì)象等類型的操作數(shù)進(jìn)行操作:
s中常用的數(shù)據(jù)類型有:
值類型(基本類型):字符串(String)、數(shù)字(Number)、布爾(Boolean)、對(duì)空(Null)、未定義(Undefined)、Symbol。
引用數(shù)據(jù)類型:對(duì)象(Object)、數(shù)組(Array)、函數(shù)(Function)。
就以上數(shù)據(jù)類型先舉幾個(gè)例子:
// 字符串(String)
let a='word';
// 數(shù)字(Number)
let b=123;
// 布爾(Boolean)
let c=true;
// 對(duì)空(Null)
let d=null;
// 未定義(Undefined)
let e;
// Symbol
let f=Symbol('123');
// 對(duì)象(Object)
let g={name:'xiangming'};
// 數(shù)組(Array)
let h=[1,2,3,4,5];
// 函數(shù)(Function)
let i=function () {
return 'done';
};
1、最常見的判斷方法:typeof
console.log('a:'+typeof a);
// a:string
console.log('b:'+typeof b);
// b:number
console.log('c:'+typeof c);
// c:boolean
console.log('d:'+typeof d);
// d:object
console.log('e:'+typeof e);
// e:undefined
console.log('f:'+typeof f);
// f:symbol
console.log('g:'+typeof g);
// g:object
console.log('h:'+typeof h);
// h:object
console.log('i:'+typeof i);
// i:function
所以,typeof 在判斷除Object類型的對(duì)象時(shí)比較方便。
2、判斷已知對(duì)象類型的方法:instanceof
console.log('a is string:'+a instanceof String);
// a is string:true
console.log('b is number:'+b instanceof Number);
// b is number:true
console.log('b is number:'+b instanceof number);
// Uncaught ReferenceError: number is not defined
注意:instanceof 后面一定要是對(duì)象類型,并且大小寫不能錯(cuò),該方法適合一些條件選擇或分支。
3、通用但很繁瑣的方法:prototype(推薦)
// 定義方法獲取變量類型
function var_type(data) {
return Object.prototype.toString.call(data).replace(/^\[object\s(.+)\]$/, '$1').toLowerCase();
}
console.log('a:'+var_type(a));
// a:string
console.log('b:'+var_type(b));
// b:number
console.log('c:'+var_type(c));
// c:boolean
console.log('d:'+var_type(d));
// d:null
console.log('e:'+var_type(e));
// e:undefined
console.log('f:'+var_type(f));
// f:symbol
console.log('g:'+var_type(g));
// g:object
console.log('h:'+var_type(h));
// h:array
console.log('i:'+var_type(i));
// i:function
此方法雖稍顯繁瑣,但只需簡(jiǎn)單封裝一個(gè)方法即可。
文章最后給大家推薦一個(gè)小編自己寫的通用后臺(tái)框架云靜Admin通用后臺(tái),小編也是第一次嘗試開源代碼,還望大家不吝賜教。
云靜Admin通用后臺(tái):
http://uadmin.yunj.net.cn/admin
開發(fā)文檔:
https://www.kancloud.cn/worklz/yunj_admin_universal/2009454
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。