Python大數據分析之數據可視化


Jupyter Notebook是一種Web應用,能讓用戶將說明文本、數學方程、代碼和可視化內容全部組合到一個易於共享的文檔中。本文例子都是在Jupyter Notebook上完成,Anaconda3自帶該工具,直接點擊打開。

 

啟動后,在New下拉菜單中選擇Python3,就會生成一個代碼交互界面。

 

matplotlib是最流行的用於繪制圖表和其它二維數據可視化的Python庫。它最初由John D.Hunter(JDH)創建,目前由一個龐大的開發人員團隊維護。它非常適合創建出版物上用的圖表。
雖然還有其它的Python可視化庫,matplotlib卻是使用最廣泛的,並且它和其它生態工具配合也非常完美。我認為,可以使用它作為默認的可視化工具。

#初始配置
import
numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False import seaborn as sns import warnings; warnings.filterwarnings(action='once') large = 22; med = 16; small = 12 params = {'axes.titlesize': large, 'legend.fontsize': med, 'figure.figsize': (16, 10), 'axes.labelsize': med, 'axes.titlesize': med, 'xtick.labelsize': med, 'ytick.labelsize': med, 'figure.titlesize': large} plt.rcParams.update(params) plt.style.use('seaborn-whitegrid') sns.set_style("white") %matplotlib inline print(mpl.__version__) print(sns.__version__)

 

 1、畫一個圓

import matplotlib.pyplot as plt
#用來正常顯示中文
plt.rcParams['font.sans-serif']=['SimHei']
#用來正常顯示負號
plt.rcParams['axes.unicode_minus']=False
import numpy as np
from matplotlib.font_manager import FontProperties
#設置字體為宋體
font =FontProperties(fname="C:/Windows/Fonts/simsun.ttc",size=14)
#在Jupyter中顯示圖像
%matplotlib inline
%config InlineBackend.figure_format="retina"
#繪制一個圓形散點圖
t=np.arange(1,10,0.05)
x=np.sin(t)
y=np.cos(t)
#定義一個圖像窗口,指定比例
plt.figure(figsize=(8,5))
#繪制一條線
plt.plot(x,y,"r-*")
#是坐標軸相等
plt.axis("equal")
plt.xlabel("正弦",fontproperties=font)
plt.ylabel("余弦",fontproperties=font)
plt.title("一個圓形",fontproperties=font)
#顯示圖像
plt.show()

 2、點、線圖

#繪制點圖或線圖
import numpy as np
import matplotlib.pyplot as plt
#生成X
x1=np.linspace(0.0,5.0)
x2=np.linspace(0.0,2.0)
#生成Y
y1=np.cos(2*np.pi*x1)*np.exp(-x1)
y2=np.cos(2*np.pi*x2)
#繪制第一個子圖,2表示整個繪圖區域分成2行,第一個1表示整個繪圖區域分成1列,
#第二個1表示子圖的位置在左上(從左到右,從上到下的順序對每個子區域進行編號)
plt.subplot(2,1,1)
#x1表示x軸數據,y1表示y軸數據,yo-表示曲線格式
plt.plot(x1,y1,'yo-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')
#繪制第二個子圖
plt.subplot(2,1,2)
plt.plot(x2,y2,'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')
plt.show()

 3、直方圖

#繪制直方圖
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

mu=100 #分布均值
sigma=15 #分布標准差
x=mu+sigma*np.random.randn(10000)
print("x:",x.shape)

#直方圖的條數
num_bins =50
#繪制直方圖,x是直方圖的一維數組,bins柱數,density向量是否歸一化,alpha透明度
#n是直方圖向量,bins返回各個bin的區間范圍,patche返回沒個bin里包含的數據的list
n,bins,patche=plt.hist(x,bins=num_bins,density=1,color='b',alpha=0.5)

#添加一個最佳擬合和曲線
#pdf(x,mu,sigma)返回參數為mu和sigma的正太分布密度函數在x處的值
y=norm.pdf(bins,mu,sigma)

plt.plot(bins,y,'r--')
plt.xlabel('Smarts')
plt.ylabel('Probability')
#在圖中添加公式使用latex的語法
plt.title('Histogram of IQ: $\mu=100$, $\sigma=15$')

#調整圖像的間距,防止y軸數值與label重合
plt.subplots_adjust(left=0.15)
plt.show()
print("bind:\n",bins)

 4、等值線圖

#繪制三維圖像
import numpy as np
from matplotlib import cm
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#生成數據
delta=0.2
x=np.arange(-3,3,delta)
y=np.arange(-3,3,delta)
X,Y = np.meshgrid(x,y) #生成網格點坐標矩陣
Z=X**2+Y**2
x=X.flatten() #返回一維數組
y=Y.flatten()
z=Z.flatten()
fig=plt.figure(figsize=(12,6)) #figsize設定圖片寬高
#cmap指顏色,jet表示藍-青-黃-紅
ax1=fig.add_subplot(121,projection='3d')
ax1.plot_trisurf(x,y,z,cmap=cm.jet, linewidth=0.01)
plt.title("3D")
ax2=fig.add_subplot(122)
#15表示顯示等高線的密集程度,數據越大畫的等高線越多
cs=ax2.contour(X,Y,Z,15,cmap='jet')
ax2.clabel(cs,inline=True,fontsize=10,fmt='%1.1f')
plt.title("Contour")
plt.show()

 4、三維曲面圖

#繪制三維圖像+各個軸的投影等高線
from matplotlib import cm
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

fig=plt.figure(figsize=(8,6))
ax=fig.gca(projection='3d')
#生成三維測試數據
X,Y,Z=axes3d.get_test_data(0.05)
ax.plot_surface(X,Y,Z,rstride=8,cstride=8,alpha=0.3)
cset=ax.contour(X,Y,Z,zdir='z',offset=-100,cmap=cm.coolwarm)
cset=ax.contour(X,Y,Z,zdir='x',offset=-40,cmap=cm.coolwarm)
cset=ax.contour(X,Y,Z,zdir='y',offset=40,cmap=cm.coolwarm)
ax.set_xlabel('X')
ax.set_xlim(-40,40)
ax.set_ylabel('Y')
ax.set_ylim(-40,40)
ax.set_zlabel('Z')
ax.set_zlim(-100,100)
plt.show()

5、條形圖

#繪制條形圖
import matplotlib.pyplot as plt
import numpy as np
#生成數據
n_groups=5
#平均分和標准差
means_men=(20,35,30,35,27)
std_men=(2,3,4,1,2)
means_women=(25,32,34,20,25)
std_women=(3,5,2,3,3)
#條形圖
fig,ax=plt.subplots()
#生成0,1,2,3,……
index=np.arange(n_groups)
bar_width=0.35 #條的寬度
opacity=0.4
error_config={"ecolor":"0.3"}

#條形圖的第一類條
rects1=plt.bar(index,means_men,bar_width,alpha=opacity,color='b',yerr=std_men,
error_kw=error_config,label='Men')
#條形圖中的第二類條
rects2=plt.bar(index+bar_width,means_women,bar_width,alpha=opacity,color='r',
yerr=std_women,error_kw=error_config,label='Women')
plt.xlabel('Group')
plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(index+bar_width,('A','B','C','D','E'))
plt.legend()
#自動調整subplot的參數給指定的填充區
plt.tight_layout()
plt.show() 

 6、餅圖

#繪制餅圖
import matplotlib.pyplot as plt
#切片將順時針方向排列並繪制
labels='Frogs','Hogs','Dogs','Logs' #標注
sizes=[15,30,45,10] #大小
colors=['yellowgreen','gold','lightskyblue','lightcoral'] #顏色
#0.1代表第二個塊從圓中分離出來
explode=(0,0.1,0,0)
#繪制
plt.pie(sizes,explode=explode,labels=labels,colors=colors,
autopct='%1.1f%%',shadow=True,startangle=90)
plt.axis('equal')
plt.show()

7、氣泡圖

#繪制氣泡圖
import matplotlib.pyplot as plt
import pandas as pd
#導入數據
df_data=pd.read_csv('D:\iris.csv')
df_data.head()
#作圖
fig,ax=plt.subplots()
#設置氣泡圖顏色,顏色數組大小必須跟df_data數組大小一致
colors= np.random.rand(df_data['SepalLength'].size)
#創建氣泡圖SepalLength為x,SepalWidth為y
ax.scatter(df_data['SepalLength'],df_data['SepalWidth'],
s=df_data['PetalLength']*100, #設置氣泡的大小
c=colors,alpha=0.6) #設置顏色透明度
ax.set_xlabel('SepalLength(cm)')
ax.set_ylabel('SepalWidth(cm)')
ax.set_title('PetalLength(cm)*100')
#顯示網格
ax.grid(True)
fig.tight_layout()
plt.show()

8、圖形灰化

from PIL import Image
#讀取圖片文件
pil_im=Image.open(r'd:\1.png')
#轉化為灰度圖
Pil_im=pil_im.convert('L')
Pil_im

 待續……

 

初始配置:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM