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()
鸢尾花数据集经常用于及其学习(分类算法)的入门例子。其中,sepal_length_cm:为花萼长度; sepal_width_cm:为花萼宽度; petal_length_cm:为花瓣长度; petal_width_cm:花瓣宽度。
2. 定义问题
通过数据可视化和分析,按照鸢尾花的特征分出鸢尾花的类别。其中涉及到的主要语法知识是数据清洗与整理。
3. 数据清洗
# 首先对数据进行简单描述,看其中是否有异常值
iris_data.shape
# 统计
iris_data.describe()
通过结果可以看出,共有150条数据,通过每个字段的平均值和方差,看不出有异常值。
# 查看唯一值
iris_data['class'].unique()
# 修改
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()
回到异常值处理中,这里分析可能是分类原因,数据都很均衡。下面利用seaborn绘制散点图矩阵。
# 散点图绘制
sns.scatterplot(x='petal_width_cm',y='petal_length_cm',data = iris_data,
color='blue',marker='+',s = 20)
# 散点图矩阵
sns.pairplot(iris_data, hue='class')
# Iris-setosa的花萼宽度直方图
iris_data.ix[iris_data['class'] == 'Iris-setosa', 'sepal_width_cm'].hist()
# 如果对异常值产生的原因不够清楚,所以直接对小于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()
# 通过索引选取Iris-versicolor样本中sepal_length_cm值小于0.1的数据
# 选取异常数据
iris_data.loc[(iris_data['class'] == 'Iris-versicolor') &
(iris_data['sepal_length_cm'] < 1.0)]
图中的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()
# 查看缺失值
iris_data[iris_data['petal_width_cm'].isnull()]
# 删除缺失值
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()
iris_data.shape
sns.pairplot(iris_data, hue='class')
# boxplot:箱体图绘制;figsize:设置画布大小。
iris_data.boxplot(column='petal_length_cm', by='class',grid=False,figsize=(6,6))