
正文
可视化库-Matplotlib-Pandas与sklearn结合(第四天)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
1. 计算每一种的比例的百分比
import pandas as pd
from matplotlib.ticker import FuncFormatternp.random.seed(0)
df = pd.DataFrame({'Condition 1':np.random.rand(20),
'Condition 2':np.random.rand(20)*0.9,
'Condtion 3':np.random.rand(20)*1.1})print(df.head())fig, ax = plt.subplots()
# stacked 进行堆叠操作
df.plot.bar(ax=ax, stacked=True)
plt.show()# 设置百分比
df_ratio = df.div(df.sum(axis=1), axis=0)
fig, ax = plt.subplots()
df_ratio.plot.bar(ax=ax, stacked=True)
ax.yaxis.set_major_formatter(FuncFormatter(lambda y,_:'{:.0%}'.format(y)))
plt.show()


2. 通过pd将数据导入,进行缺失值补充,画出特征的PCA图
# 1 下载数据
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00383/risk_factors_cervical_cancer.csv'
df = pd.read_csv(url, na_values='?')
print(df.head())
# 2.对缺失值进行补充
from sklearn.preprocessing import Imputer
# 引入inputer() 使用均值对缺失值进行填充
impute = pd.DataFrame(Imputer().fit_transform(df))
print(impute.head())
impute.columns = df.columns
impute.index = df.indeximport seaborn as sns
from sklearn.decomposition import PCA
from mpl_toolkits.mplot3d import Axes3D# 3.取出样品特征, 取出Dx:Cancer
features = impute.drop('Dx:Cancer', axis=1)
y = impute['Dx:Cancer']
# 4进行PCA操作
pca = PCA(n_components=3)
X_r = pca.fit_transform(features)
# '{:.2%}'表示保留两位小数, pca.explained_variabce_ratio表示所占的比例
print('Explained variance:\nPC1{:.2%}\nPC2{:.2%}\nPC3{:.2%}'
.format(pca.explained_variance_ratio_[0],
pca.explained_variance_ratio_[1],
pca.explained_variance_ratio_[2],))
# 构造三维坐标系
fig = plt.figure()
ax = Axes3D(fig)
# 画散点图
ax.scatter(X_r[:, 0], X_r[:, 1], X_r[:, 2], c='r', cmap=plt.cm.coolwarm)
# 对三个维度的坐标进行标注
ax.set_xlabel('PC1')
ax.set_ylabel('PC2')
ax.set_zlabel('PC3')plt.show()








