import matplptlib.pypplot as plt
import pandas as pd
# 讀取一個分類明確的資料集csv檔案,檔案裡資料分了四類
# 資料長這樣子,先大致head()前五行看一下吧
# dataset,x,y
I,10.0,8.04
I,8.0,6.95
I,13.0,7.58
I,9.0,8.81
I,11.0,8.33
oh=pd.read_csv('anscombe.csv')
print(oh)
# 取資料子集
oh_1=oh[oh['dataset'] == 'I']
oh_2=oh[oh['dataset'] == 'II']
oh_3=oh[oh['dataset'] == 'III']
oh_4=oh[oh['dataset'] == 'IV']
plt.plot(oh_1['x'],oh_1['y'])
plt.show()
# 如果想用它畫圓點,可以給plt.plot傳遞一個‘o’引數
plt.plot(oh_1['x'],oh_1['y'],'o')
plt.show()
# 現在有四個 子資料集,要把他們放在一起,所以先建立一個畫布
# 就弄一個2x2的畫布吧
fig=plt.figure()
axis1=fig.add_subplot(2,2,1)
axis2=fig.add_subplot(2,2,2)
axis3=fig.add_subplot(2,2,3)
axis4=fig.add_subplot(2,2,4)
# 哈哈然後出圖吧
axes1.plot(oh_1['x'],oh_1['y'],'o')
axes2.plot(oh_2['x'],oh_2['y'],'o')
axes3.plot(oh_3['x'],oh_3['y'],'o')
axes4.plot(oh_4['x'],oh_4['y'],'o')
#向各個子圖新增標籤,並使用tight_layout方法確保各個座標軸彼此分開
axes1.set_title('oh_1')
axes2.set_title('oh_2')
axes3.set_title('oh_3')
axes4.set_title('oh_4')
#為整幅圖新增一個大標題
fig.suptitle('anscomble data')
plt.show()
#緊湊佈局
fig.tight_layout()
import pandas as pd
tips=pd.read_csv('tips.csv')
print(tips)
# tips檔案 資料 截一下前五行
# 就長這樣吧
""" "total_bill","tip","sex","smoker","day","time","size"
16.99,1.01,"Female","No","Sun","Dinner",2
10.34,1.66,"Male","No","Sun","Dinner",3
21.01,3.5,"Male","No","Sun","Dinner",3
23.68,3.31,"Male","No","Sun","Dinner",2
24.59,3.61,"Female","No","Sun","Dinner",4
"""
# 大概就是對 餐桌文化,比如不同性別,消費時間,餐桌級別等不同群體的消費賬單做個分析,totalbill 即消費賬單。
# ok 畫圖吧
import matplotlib.pyplot as plt
fig=plt.figure()
# 畫布啊畫布!
axes1=fig.add_subplot(1,1,1)
# 畫布一行一列,放第一個
axes1.hist(tips['total_bill'],bins=10)
# 直方圖表示式,y軸衡量的是totalbill,x軸以10為組距
axes1.set_title('histogram of total bill')
axes1.set_xlabel('Frequency')
axes1.set_ylabel('total bill')
plt.show()
雙變數
雙變數畫圖,兩兩對比,妙不可言。就還是用剛才的那個消費賬單資料吧
1)散點圖
scatter_plot=plt.figure()
axes1=plt.add_subplot(1,1,1)
axes1.scatter(tips['total_bill'],tips['tip'])
# 再搞一下標籤就很完美
axes1.set_xlabel('total bill')
axes1.set_ ylabel('tip')
plt.show()
boxplot=plt.figure()
axes1=boxplot.add_subplot(1,1,1)
axes1.boxplot(
# 箱線圖的第一引數是資料
# 由於要繪製多塊資料,因此必須把每塊資料放入列表中
[tips[tips['sex']=='Female']['tip'],
tips[tips['sex']=='Male']['tip']],
#列表中第一個資料表示分類類別,第二表示y軸資料
labels=['Female','Male']
#展示標籤
)
axes1.set_xlabel('sex')
axes1.set_ylabel('Tip')
axes1.set_title('boxplot of tips by sex')
plt.show()
其實同樣是畫箱線圖,呼叫seaborn庫 程式碼更便捷,可調節的款式也比較多。留給下次睡不著整理吧。。
def recode_sex(sex):
if sex =='Famale':
return 0
else:
return 1
tips['sex_color']=tips['sex'].apply(recode_sex)
# apply 是對列呼叫函數的好方法,這行程式碼 賦值給tips資料集一個帶顏色引數的新列 ' sex_color '
# 下面開始畫圖吧
# 建立畫布
scatter_plot=plt.figure()
axes1=scatter_plot.add_subplot(1,1,1)
axes1.scatter(
x=tips['total_bill'],
y=tips['tips'],
s=tips['size']*10,
# 增加一個‘size’ 變數,用大小*10倍的大小區分
c=tips['sex_color']
alpha=0.5
# 增加點透明度,以表示重疊的點
)
# 最後新增標題
axes1.set_title('total bill vs tip colored by sex and sized by size')
axes1.set_xlabel('total bill')
axes1.set_ylabel('tip')
plt.show()