????開講啦!!!!????蘇州程序大白???? |
????開講啦!!!!????蘇州程序大白???? |
? 個人主頁:蘇州程序大白
?作者介紹:中國DBA聯(lián)盟(ACDU)成員,CSDN全國各地程序猿(媛)聚集地管理員。目前從事工業(yè)自動化軟件開發(fā)工作。擅長C#、Java、機(jī)器視覺、底層算法等語言。2019年成立柒月軟件工作室。
?如果文章對你有幫助,歡迎關(guān)注、點贊、收藏(一鍵三連)和C#、Halcon、python+opencv、VUE、各大公司面試等一些訂閱專欄哦
?? 承接各種軟件開發(fā)項目
? 有任何問題歡迎私信,看到會及時回復(fù)
? 微信號:stbsl6,微信公眾號:蘇州程序大白
? 想加入技術(shù)交流群的可以加我好友,群里會分享學(xué)習(xí)資料
環(huán)境搭建:
下載Anaconda搭建Python環(huán)境
。細(xì)講可以看文章
下載類庫Numpy
, SciPy
, matplotlib
, pandas
和 seaborn
。可以參考本文
引入需要的庫,設(shè)置一下顯示網(wǎng)格的樣式:
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns
下面我們使用seaborn最常用的方法relplot()實現(xiàn)散點圖scatterplot()
和線圖lineplot()
。
首先可以引入seaborn中自帶事例子數(shù)據(jù)集“tips”,這個數(shù)據(jù)集的屬性有:
時間數(shù)據(jù) week。
賬單: 總消費,小費 total_bill, tips。
消費者性別 sex。
消費者是否抽煙 smoker。
等等…
下面很多例子使用了tips數(shù)據(jù)集,不會再特別指出
sns.set(style="darkgrid") # 設(shè)置樣式為網(wǎng)格tips = sns.load_dataset("tips")
其實seaborn中有很多畫散點圖的方法其中一種是scatterplot(),使用方法是把數(shù)據(jù)集中的集合分配給方法中的屬性,這樣不同集合就會使用散點圖中不同屬性的樣式展示出來如下面實例中的色調(diào)屬性hue獲取
了數(shù)據(jù)集中的smoker集合
,這樣集合中的數(shù)據(jù)差異就可以通過色調(diào)的不同展示出來,其他同理。
sns.relplot(x="total_bill", y="tip", size="size",hue="smoker", palette="ch:r=-.5,l=.75", style="time",sizes=(15, 200), data=tips);
scatterplot
是relplot
的默認(rèn)方法所以不需要多帶帶設(shè)置,具體屬性可以去scatterplot()的Api查看。
relplot
里的第二個方法lineplot
,前面說過默認(rèn)方法是scatterplot
所以要設(shè)置屬性kind=lineplot
啟用折線圖,這個方法默認(rèn)sort=true
將x軸數(shù)據(jù)與y軸數(shù)據(jù)按順序?qū)?yīng)起來。
fmri = sns.load_dataset("fmri")sns.relplot(x="timepoint", y="signal", hue="region", style="event", dashes=True, # 開啟顯示虛線 markers=True, # 顯示標(biāo)記 # ci="sd" # 顯示標(biāo)準(zhǔn)偏差,默認(rèn)是顯示置信區(qū)間,None關(guān)閉顯示 kind="line", data=fmri);
這里我們引入一個新的fmri
數(shù)據(jù)集。
用到relplot
的屬性是col
和col_wrap
自動分行,同理也可以用row
屬性設(shè)置列。
sns.relplot(x="timepoint", y="signal", hue="event", style="event", col="subject", col_wrap=5, # 設(shè)置每行顯示圖表數(shù)量 height=3, # 每個圖表的高度 kind="line", data=fmri.query("region == "frontal""));
對數(shù)據(jù)進(jìn)行分類可視化用到的方法是catplot(),和數(shù)據(jù)關(guān)系可視化類似,catplot()
也有多種分類(kind),包括散點圖(strip
,swarm)
,分布圖(box
,violin
,boxen
)和柱狀圖(point
,bar
,count
)。
sns.set(style="ticks", color_codes=True) #設(shè)置一下樣式
除了種類外,散點圖能精確的顯示數(shù)據(jù)的分布,散點圖默認(rèn)顯示方式是stript
,例如下面的例子。
tips = sns.load_dataset("tips") #載入數(shù)據(jù)sns.catplot(x="day", y="total_bill", data=tips);
可以發(fā)現(xiàn)上面有些數(shù)據(jù)重疊在一起了,解決這個問題可以使用jitter
屬性,也可使用另一種散點圖swarm,
它自動使用算法區(qū)分出可能重疊的數(shù)據(jù)。需要注意的是可以使用order
來控制順序。下面的例子可以看出:
sns.catplot(x="total_bill", y="day", hue="time", kind="swarm", order=["Sun", "Sat","Fri","Thur"], data=tips);
數(shù)據(jù)量太大的時候,散點圖顯示不同種類的分布情況非常恐怖,所以可以使用分布圖來觀察不同種類數(shù)據(jù)的分布情況,具體代碼就不貼了,只需要更改一下kind屬性就可以了,下面分別看一下box,boxen,violin三種情況不同的顯示風(fēng)格:
其中要重點說一下violin
方法使用了KDE,因此有一些額外的屬性可以設(shè)置,具體可以查看一下api例如:
sns.catplot(x="total_bill", y="day", hue="sex",bw=.4, cut=2, inner="stick", kind="violin", split=True, data=tips);
另外看一下如何將兩個不同類型的圖表合為一個,例如下面我們將violin
和swarm
類型的圖表在一張圖里展示:
g = sns.catplot(x="day", y="total_bill", kind="violin", inner=None, data=tips)sns.swarmplot(x="day", y="total_bill", color="k", size=3, data=tips, ax=g.ax);
很多情況我們是不需要特別精確的數(shù)據(jù)信息的,只需要了解各個分類的走勢和差異性,這個時候柱狀圖bar
和點狀圖point
可以展示的信息更簡潔明了。
例如這里我們引入一個新的數(shù)據(jù)集titanic來分析一下泰坦尼克號上不同倉位的乘客的生存率
titanic = sns.load_dataset("titanic")
首先下面看一下柱狀圖,這張圖是可以直觀的比較出各個倉位的生存率,需要指出的是柱狀圖的矩形邊框也可以設(shè)置顏色。
sns.catplot(x="class", y="survived", hue="sex", palette={"male": "g", "female": "m"}, # 設(shè)置hue屬性顯示的顏色 edgecolor=".6", kind="bar", data=titanic);
點狀圖可以設(shè)置的屬性也有很多,比如線的樣式,點的樣式等等
sns.catplot(x="class", y="survived", hue="sex", palette={"male": "g", "female": "m"}, markers=["^", "o"], linestyles=["-", "--"], kind="point", data=titanic);
設(shè)置圖表的大小可以使用matplotlib里的plt.subplots(figsize=(width,height))
想要改變圖表各個軸的精度可以使用set方法
參照下面的實例
g = sns.catplot(x="fare", y="survived", row="class", kind="box", orient="h", height=1.5, aspect=4, data=titanic.query("fare > 0"))g.set(xscale="log"); # x軸以對數(shù)形式顯示
拿到數(shù)據(jù)集后,通常第一件事就是確定數(shù)據(jù)的分布,接下來我們看一下對于單變量(unvariable
)和雙變量(bivariable)
分布如何進(jìn)行可視化。
單變量分布的常見可視化模式是直方圖(histogram)或者KDA(kernel debsity estimate),在seaborn中使用的方法是displot()
,其中的hist屬性
控制是否顯示直方圖(默認(rèn)開啟),kda屬性
控制是否顯示KDA分布(默認(rèn)開啟),rug屬性
控制顯示刻度(默認(rèn)關(guān)閉)。
x = np.random.normal(size=100)sns.distplot(x,hist=True,kde=True, rug=True);
直方圖沒什么說的,是觀察數(shù)據(jù)分布常見且直觀的一個方法,原理也比較簡單. 這里重點說一下KDE,它本身在很多領(lǐng)域都是極其重要的工具. 繪制kde圖還可以使用kdeplot()
方法或者rugplot()方法
,例如下面的例子
x = np.random.normal(0, 1, size=30)sns.kdeplot(x)sns.kdeplot(x, shade=True, bw=.2, label="bw: .2"); # shade屬性控制是否顯示分布區(qū)域陰影sns.kdeplot(x, bw=2, label="bw: 2") plt.legend();
從圖中可以看出,bw屬性
控制的是kde曲線的擬合程度。
首先我們創(chuàng)建一個數(shù)據(jù)集作為例子
mean, cov = [0, 1], [(1, .5), (.5, 1)]data = np.random.multivariate_normal(mean, cov, 200)df = pd.DataFrame(data, columns=["x", "y"])
繪制雙變量分布圖的方法是jointplot()
,用多個面板從兩個維度繪制數(shù)據(jù)分布,seaborn提供了scatterplot(defult)
,hexbin
,kde
三種樣式
sns.jointplot(x="x", y="y", data=df);
x, y = np.random.multivariate_normal(mean, cov, 1000).Twith sns.axes_style("white"): sns.jointplot(x=x, y=y, kind="hex", color="k");
sns.jointplot(x="x", y="y", data=df, kind="kde");
其實kdeplot()
也可以實現(xiàn)kde雙變量分布
f, ax = plt.subplots(figsize=(6, 6)) # 設(shè)置顯示圖形的大小sns.kdeplot(df.x, df.y, ax=ax) sns.rugplot(df.x, color="g", ax=ax)sns.rugplot(df.y, vertical=True, ax=ax);
例如調(diào)用數(shù)據(jù)集iris
(鳶尾屬植物)
iris = sns.load_dataset("iris")
然后使用pairplot()方法
sns.pairplot(iris, hue="species");
四個屬性sepal_width sepa_height和petal_length petal_width
的對應(yīng)關(guān)系。
線性回歸模型在數(shù)據(jù)可視化中可以展示數(shù)據(jù)的分布和趨勢,也可以起到預(yù)測數(shù)據(jù)的作用。我們還是使用小費tips
數(shù)據(jù)集。
tips = sns.load_dataset("tips")
seaborn提供了兩個方法regplot()
和lmplot()
。
sns.regplot(x="total_bill", y="tip", data=tips);
sns.lmplot(x="total_bill", y="tip", data=tips);
通過上面兩個例子 ,會發(fā)現(xiàn)這兩個方法繪制的結(jié)果區(qū)別不大,但是他們傳入的數(shù)據(jù)是有區(qū)別的:
regplot()
的x
和y軸
可以是簡單的numpy數(shù)組
,pandas series對象
或者pandas DataFrame對象
。
lmplot()
的x,y參數(shù)必須指定為字符串。
anscombe = sns.load_dataset("anscombe")
以數(shù)據(jù)集Anscombe’s quartet(安斯庫姆四重奏)為例,先通過下面的表格簡單了解一下這個數(shù)據(jù)集,簡單是說就是四組包含
然后plot一下四組數(shù)據(jù)(注意這里使用lmplot,所以x,y軸對應(yīng)的是字符串),基本工作流程是使用數(shù)據(jù)集和用于構(gòu)造網(wǎng)格的變量初始化FacetGrid對象。
sns.lmplot(x="x", y="y", col="dataset", col_wrap=2, data=anscombe, ci=None,scatter_kws={"s": 80});
現(xiàn)在分析一下這四個數(shù)據(jù)集,第一個沒啥顯著特征,觀察第二個數(shù)據(jù)集可以發(fā)現(xiàn)它存在高階關(guān)系,可以通過order屬性控制階數(shù),進(jìn)行多項式回歸擬合
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == "II""), order=2, ci=None, scatter_kws={"s": 80});
第三個數(shù)據(jù)集存在一個噪點outlier影響了擬合效果,可以使用roboust屬性保持健壯性
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == "III""), robust=True, ci=None, scatter_kws={"s": 80});
?讓天下沒有學(xué)不會的技術(shù)?
學(xué)習(xí)C#不再是難問題
?《C#入門到高級教程》?
有關(guān)C#實戰(zhàn)項目
?C#RS232C通訊源碼?
?C#委托數(shù)據(jù)傳輸?
?C# Modbus TCP 源代碼?
?C# 倉庫管理系統(tǒng)源碼?
?C# 歐姆龍通訊Demo?
?C#+WPF+SQL目前在某市上線的車管所攝像系統(tǒng)?
?2021C#與Halcon視覺通用的框架?
?2021年視覺項目中利用C#完成三菱PLC與上位機(jī)的通訊?
?VP聯(lián)合開源深度學(xué)習(xí)編程(WPF)?
?有關(guān)C#項目歡迎各位查看個人主頁?
?機(jī)器視覺、深度學(xué)習(xí)?
學(xué)習(xí)機(jī)器視覺、深度學(xué)習(xí)不再是難問題
?《Halcon入門到精通》?
?《深度學(xué)習(xí)資料與教程》?
有關(guān)機(jī)器視覺、深度學(xué)習(xí)實戰(zhàn)
?2021年C#+HALCON視覺軟件?
?2021年C#+HALCON實現(xiàn)模板匹配?
?C#集成Halcon的深度學(xué)習(xí)軟件?
?C#集成Halcon的深度學(xué)習(xí)軟件,帶[MNIST例子]數(shù)據(jù)集?
?C#支持等比例縮放拖動的halcon WPF開源窗體控件?
?2021年Labview聯(lián)合HALCON?
?2021年Labview聯(lián)合Visionpro?
?基于Halcon及VS的動車組制動閘片厚度自動識別模塊?
?有關(guān)機(jī)器視覺、深度學(xué)習(xí)實戰(zhàn)歡迎各位查看個人主頁?
?Java、數(shù)據(jù)庫教程與項目?
學(xué)習(xí)Java、數(shù)據(jù)庫教程不再是難問題
?《JAVA入門到高級教程》?
?《數(shù)據(jù)庫入門到高級教程》?
有關(guān)Java、數(shù)據(jù)庫項目實戰(zhàn)
?Java經(jīng)典懷舊小霸王網(wǎng)頁游戲機(jī)源碼增強(qiáng)版?
?js+css類似網(wǎng)頁版網(wǎng)易音樂源碼?
?Java物業(yè)管理系統(tǒng)+小程序源碼?
?JavaWeb家居電子商城?
?JAVA酒店客房預(yù)定管理系統(tǒng)的設(shè)計與實現(xiàn)SQLserver?
?JAVA圖書管理系統(tǒng)的研究與開發(fā)MYSQL?
?有關(guān)Java、數(shù)據(jù)庫教程與項目實戰(zhàn)歡迎各位查看個人主頁?
?分享Python知識講解、分享?
學(xué)習(xí)Python不再是難問題
?《Python知識、項目專欄》?
?《Python 檢測抖音關(guān)注賬號是否封號程》?
?《手把手教你Python+Qt5安裝與使用》?
?《用一萬字給小白全面講解python編程基礎(chǔ)問答》?
?《Python 繪制Android CPU和內(nèi)存增長曲線》?
有關(guān)Python項目實戰(zhàn)
?Python基于Django圖書管理系統(tǒng)?
?Python管理系統(tǒng)?
?2021年9個常用的python爬蟲源碼?
?python二維碼生成器?
?有關(guān)Python教程與項目實戰(zhàn)歡迎各位查看個人主頁?
?分享各大公司面試題、面試流程?
面試成功不是難事
?《2021年金九銀十最新的VUE面試題??《??記得收藏??》》?
?《只要你認(rèn)真看完一萬字??Linux操作系統(tǒng)基礎(chǔ)知識??分分鐘鐘都吊打面試官《??記得收藏??》》?
?《??用一萬字給小白全面講解python編程基礎(chǔ)問答??《?記得收藏不然看著看著就不見了?》》?
?有關(guān)各大公司面試題、面試流程歡迎各位查看個人主頁?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/122021.html
??蘇州程序大白一文教你學(xué)會微信小程序開發(fā)??《??記得收藏??》 目錄 ????開講啦!!!!????蘇州程序大白?????博主介紹?前言?講講專享小程序有什么優(yōu)勢? ?小程序文件分析?事件綁定?圖片問題?輪播圖swiper?自定義組件?生命周期?頁面生命周期?項目制作?緩沖事件?`es7 async`語法 ?觸底事件??下拉刷新頁面??css省略號??預(yù)覽大圖??購物車模擬??獲取地...
摘要:表名列名列名列名值值值刪楷體刪除數(shù)據(jù)是最簡單的語句了,只需要指定表名和查詢條件就行。列名統(tǒng)計當(dāng)前條件下查詢出的數(shù)據(jù)的數(shù)量。 一文解析SQLServer數(shù)據(jù)庫 目錄...
文章目錄 強(qiáng)烈推薦系列教程,建議學(xué)起來!! 一.pycharm下載安裝二.python下載安裝三.pycharm上配置python四.配置鏡像源讓你下載嗖嗖的快4.1pycharm內(nèi)部配置 4.2手動添加鏡像源4.3永久配置鏡像源 五.插件安裝(比如漢化?)5.1自動補碼神器第一款5.2漢化pycharm5.3其它插件 六.美女背景七.自定義腳本開頭八、這個前言一定要看九、pyt...
閱讀 1811·2021-10-09 09:44
閱讀 3381·2021-09-28 09:35
閱讀 1371·2021-09-01 10:31
閱讀 1657·2019-08-30 15:55
閱讀 2696·2019-08-30 15:54
閱讀 922·2019-08-29 17:07
閱讀 1371·2019-08-29 15:04
閱讀 2000·2019-08-26 13:56