具体ipynb文件请移步Github
#各种所需要的库函数首先加载
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline # Part 1.iris深入认识 ### 这是什么数据,加载后请分析? iris=pd.read_csv('data/iris-data.csv')
iris.head() iris.shape iris.columns.tolist() iris.count() iris.info() iris.describe() iris.isnull().sum() #又是class列名惹的祸
iris.rename(columns={'class':'species'},inplace=True)
iris['species'].value_counts() #### 初步探索:
#数据共有150行数据,每行5列;
#前4列为两个二元组,即花萼长宽、花瓣长宽;
#第五列为花的种类,由于列名不一致,所以列出了5中,但只有三种。
#空值数据为petal_width_cm,有5个空值
#类别名称不要用class,命名产生冲突 ### 解决第一步遇到的问题
#1.解决类名不一致
#2.解决空值 #### 以上发现了类名有问题,即列名不一致。
#某列的名字需要改:data_df.rename(columns={'class':'Species'},inplace=True)
#某列中的类别需要改:data_df['Species'].replace(['versicolor','Iris-setossa'],['Iris-versicolor','Iris-setosa'],inplace=True) iris['species'].replace(['versicolor','Iris-setossa'],['Iris-versicolor','Iris-setosa'],inplace=True)
iris['species'].value_counts() #### 解决空值问题,由于空值少,所以可以用均值填充,如果缺失值太多,那么可以剔除,但要保留数据到备份。
#### 特别注意,空值是属于哪一类的,不要拿所有类的均值填充!!!
#### pd.loc是用[], excuse me ? #average=iris['petal_width_cm'].mean()#skipna : boolean, default True
#iris['petal_width_cm'].fillna(average)
iris.isnull().sum()
df_part=iris[iris['petal_width_cm'].isnull()==True]
df_part
#注意到空值的所有数据都是Iris-setosa的数据,所以用这个数据填充
average=iris.loc[iris['species']=='Iris-setosa','petal_width_cm' ].mean()
iris.loc[(iris['species']=='Iris-setosa') & (iris['petal_width_cm'].isnull()),'petal_width_cm'] iris.loc[(iris['species']=='Iris-setosa') & (iris['petal_width_cm'].isnull()),'petal_width_cm']=average
iris.isnull().sum() # Part 2.各种图表分析 sb.pairplot(iris,hue='species') #### seaborn的二元plot绘图很好用,两两组合,对角线是hist图表。
#### 以上观察第一列的黄点和第二列观察到蓝色是离群点。再用柱状图进一步分析:
#### 以下发现Iris-versicolor中的 sepal_length_cm有问题 iris[iris['species']=='Iris-versicolor'].hist() iris[iris['sepal_length_cm']<2.5] iris.loc[(iris['species']=='Iris-versicolor') & (iris['sepal_length_cm']>2.5), 'sepal_length_cm' ].mean() iris.loc[(iris['species']=='Iris-versicolor') & (iris['sepal_length_cm']<2.5), 'sepal_length_cm' ].mean() #### 对比发现,两种数据相差100倍,所以根据业务场景分析,应该是单位cm与 m 导致的错误,所以纠正数据而不是drop数据。
#### 此处用到了 *= 的精髓, 将原来的数据扩大或缩小倍数 iris.loc[(iris['species']=='Iris-versicolor') & (iris['sepal_length_cm']<2.5), 'sepal_length_cm' ] *=100 #### 接下来观察蓝色离群点,即Iris-setosa,绘制以下图表后发现:
#### 其sepal_width_cm异常 iris.loc[iris['species']=='Iris-setosa','sepal_width_cm'].hist() iris.loc[(iris['species']=='Iris-setosa') & (iris['sepal_width_cm']<2.5)] iris.loc[(iris['species']=='Iris-setosa') & (iris['sepal_width_cm']>2.5),'sepal_width_cm'].describe() (2.9-2.3)/2.3
(3.44-2.3)/3.44 #就该异常点来看:(2.9-2.3)%2.3=0.26086956521739135,
#它本身就离群中心较远,而且比离他最近的都小了较大的一部分。由于没有具体场景分析调整,所以drop掉 iris = iris.loc[(iris['species'] != 'Iris-setosa') | (iris['sepal_width_cm'] >= 2.5)]
iris.loc[iris['species'] == 'Iris-setosa', 'sepal_width_cm'].hist()
; sb.pairplot(iris,hue='species') #### 清洗完数据后就可以保存干净的数据到新的csv文件中了。 iris.to_csv('iris-data-clean.csv', index=False)
iris_data_clean = pd.read_csv('iris-data-clean.csv') ## Testing our data # We know that we should only have three classes
assert len(iris_data_clean['species'].unique()) == 3 # We know that sepal lengths for 'Iris-versicolor' should never be below 2.5 cm
assert iris_data_clean.loc[iris_data_clean['species'] == 'Iris-versicolor', 'sepal_length_cm'].min() >= 2.5 # We know that our data set should have no missing measurements
assert len(iris_data_clean.loc[(iris_data_clean['sepal_length_cm'].isnull()) |
(iris_data_clean['sepal_width_cm'].isnull()) |
(iris_data_clean['petal_length_cm'].isnull()) |
(iris_data_clean['petal_width_cm'].isnull())]) == 0 sb.pairplot(iris_data_clean)#没有 hue参数,所以全都是一类,都是同一颜色
; sb.pairplot(iris_data_clean,hue='species')
; 花瓣的尺寸可以很容易地区分Iris-setosa和其他类型的鸢尾。鉴于Iris-versicolor和鸢尾-virginica的测量值有多少重叠,区分它们将变得更加困难。 花瓣长度和花瓣宽度,以及萼片长度和萼片宽度之间也存在相关性。 田野生物学家向我们保证,这是可以预料的:花瓣越长,往往越宽,萼片也一样。 我们也可以把数据绘制成小提琴图来比较各个班级的测量分布。 plt.figure(figsize=(10, 10)) for column_index, column in enumerate(iris_data_clean.columns): if column == 'species':
continue #print('column_index=',column_index) column_index是0序
plt.subplot(2, 2, column_index + 1)
sb.violinplot(x='species', y=column, data=iris_data_clean)

Deep_into_iris的更多相关文章

随机推荐

  1. Bootstrap-CL:按钮组

    ylbtech-Bootstrap-CL:按钮组 1.返回顶部 1. Bootstrap 按钮组 按钮组允许多个按钮被堆叠在同一行上.当你想要把按钮对齐在一起时,这就显得非常有用.您可以通过 Boot ...

  2. 【旧文章搬运】CsrssWalker学习笔记

    原文发表于百度空间及看雪论坛,2009-05-13 看雪论坛地址:https://bbs.pediy.com/thread-89708.htm============================= ...

  3. Quartz 2D(常用API函数、绘制图形、点线模式)

    Quzrtz 2D 绘图的核心 API 是 CGContextRef ,它专门用于绘制各种图形. 绘制图形关键是两步: 1.获取 CGContextRef ; 2.调用 CGContextRef 的方 ...

  4. Eclipse安装配置Maven

    Eclipse安装配置Maven 1 安装配置Maven 1.1 下载Maven 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven.   ...

  5. poj3050【dfs】

    题意: 5*5的矩阵里,某个点能够上下左右走,走5步,然后路径会形成一个串,问你,这个5*5里面能够形成多少个不同个串. 思路: 直接暴搜,然后对于一个串塞到set里去,然后输出set里的个数就好了 ...

  6. IT兄弟连 JavaWeb教程 经典案例3

    案例需求:写一个用户登录的html页面有账号和密码,并在登录的Servlet中获取登录的账号和密码,如果账号是abc密码是123则重定向到main.html,否则重定向到login.html. 案例实 ...

  7. Luogu P2170选学霸【并查集+背包】By cellur925

    题目传送门 开始看到本题完全认为就是个彻头彻尾的并查集,只要把实力相当的人都并到一个集合中,最后再找一共有多少联通块即可. 后来发现这是大错特错的qwq.因为选了一个集合中的某人,那这个集合中所有人就 ...

  8. 字符串-format格式化

    format函数格式化操作(3.6以上) 基本格式: 变量.format(参数,参数,....) 限定符号:(必须在:后面使用) 对齐相关:参数位置:填充符号对齐符号总长度 1:#>20 < ...

  9. 关于C_Cpp的一些小结

    ## 某些函数的使用 1. printf / sprintf / fprintf printf:把格式字符串输出到标准输出(可重定向) sprintf:把格式字符串输出到指定字符串中,参数比print ...

  10. Hdu 5452 Minimum Cut (2015 ACM/ICPC Asia Regional Shenyang Online) dfs + LCA

    题目链接: Hdu 5452 Minimum Cut 题目描述: 有一棵生成树,有n个点,给出m-n+1条边,截断一条生成树上的边后,再截断至少多少条边才能使图不连通, 问截断总边数? 解题思路: 因 ...