Python数据分析项目实例2:鸢尾花(Iris)数据集分析

iris数据集下载(免费)https://download.csdn.net/download/weixin_44940488/20718531

使用的分析软件:jupyter notebook

主要语法知识:Python数据清洗与整理、seaborn数据可视化。

1.  导入数据

# 导入相关库
from pandas import Series,DataFrame
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 
import matplotlib as mpl
import seaborn as sns  #导入seaborn绘图库
# 读取数据集
iris_data = pd.read_csv(open('数据\iris-data.csv'))
iris_data.head()

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

      鸢尾花数据集经常用于及其学习(分类算法)的入门例子。其中,sepal_length_cm:为花萼长度; sepal_width_cm:为花萼宽度; petal_length_cm:为花瓣长度; petal_width_cm:花瓣宽度。

2.  定义问题

         通过数据可视化和分析,按照鸢尾花的特征分出鸢尾花的类别。其中涉及到的主要语法知识是数据清洗与整理。

3.  数据清洗

# 首先对数据进行简单描述,看其中是否有异常值
iris_data.shape

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

# 统计
iris_data.describe()

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

 通过结果可以看出,共有150条数据,通过每个字段的平均值和方差,看不出有异常值。


# 查看唯一值
iris_data['class'].unique()

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

# 修改
iris_data.ix[iris_data['class'] == 'versicolor', 'class'] = 'Iris-versicolor'
iris_data.ix[iris_data['class'] == 'Iris-setossa', 'class'] = 'Iris-setosa'

iris_data['class'].unique()

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

        回到异常值处理中,这里分析可能是分类原因,数据都很均衡。下面利用seaborn绘制散点图矩阵。

# 散点图绘制
sns.scatterplot(x='petal_width_cm',y='petal_length_cm',data = iris_data,
               color='blue',marker='+',s = 20)

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

# 散点图矩阵
sns.pairplot(iris_data, hue='class')

 Python数据分析项目实例2:鸢尾花(Iris)数据集分析

# Iris-setosa的花萼宽度直方图
iris_data.ix[iris_data['class'] == 'Iris-setosa', 'sepal_width_cm'].hist()

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

# 如果对异常值产生的原因不够清楚,所以直接对小于2.5cm的数据进行过滤
iris_data = iris_data.loc[(iris_data['class'] != 'Iris-setosa') | (iris_data['sepal_width_cm'] >= 2.5)]
iris_data.loc[iris_data['class'] == 'Iris-setosa', 'sepal_width_cm'].hist()

Python数据分析项目实例2:鸢尾花(Iris)数据集分析


# 通过索引选取Iris-versicolor样本中sepal_length_cm值小于0.1的数据
# 选取异常数据
iris_data.loc[(iris_data['class'] == 'Iris-versicolor') &
              (iris_data['sepal_length_cm'] < 1.0)]

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

       图中的sepal_length_cm数据很小,有可能是单位错误,这里输入的是以m为单位,通过与其他数据的比较,初步认定可能是单位设置问题。通过以下代码,对数据乘以100。

iris_data.loc[(iris_data['class'] == 'Iris-versicolor') &
              (iris_data['sepal_length_cm'] < 1.0),
              'sepal_length_cm'] *= 100.0
# 查看是否有缺失值
iris_data.isnull().sum()

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

# 查看缺失值
iris_data[iris_data['petal_width_cm'].isnull()]

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

# 删除缺失值
iris_data.dropna(inplace=True)

4.  数据保存

iris_data.to_csv('数据\iris-clean-data.csv', index=False)

5.  数据探索

# 数据读取
iris_data = pd.read_csv(open('数据\iris-clean-data.csv'))
iris_data.head()

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

iris_data.shape

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

sns.pairplot(iris_data, hue='class')

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

# boxplot:箱体图绘制;figsize:设置画布大小。
iris_data.boxplot(column='petal_length_cm', by='class',grid=False,figsize=(6,6))

Python数据分析项目实例2:鸢尾花(Iris)数据集分析

上一篇:遗传算法的神经网络python实现源码


下一篇:设计模式-代理模式(Proxy)