本次主要围绕Iris数据集进行一个简单的数据分析, 另外在数据的可视化部分进行了重点介绍.
环境
win8, python3.7, jupyter notebook
目录
正文
1. 项目背景
鸢尾属(拉丁学名:Iris L.), 单子叶植物纲, 鸢尾科多年生草本植物, 开的花大而美丽, 观赏价值很高. 鸢尾属约300种, Iris数据集中包含了其中的三种: 山鸢尾(Setosa), 杂色鸢尾(Versicolour), 维吉尼亚鸢尾(Virginica), 每种50个数据, 共含150个数据. 在每个数据包含四个属性: 花萼长度,花萼宽度,花瓣长度,花瓣宽度, 可通过这四个属性预测鸢尾花卉属于 (山鸢尾, 杂色鸢尾, 维吉尼亚鸢尾) 哪一类.
2. 数据概览
数据来源: https://www.kaggle.com/benhamner/python-data-visualizations/data
2.1 读取数据
数据为csv文件, 读取数据:
importpandas as pd
df_Iris= pd.read_csv('Iris.csv')
2.2 查看前/后5行数据
#前5行
df_Iris.head()#后5行
df_Iris.tail()
通过这10行数据也就大致确定数据维度150行X6列以及各特征内的基本信息:
Id: 鸢尾花编号
SepaLengthCm: 花萼长度, 单位cm
SepalWidthCm: 花萼宽度, 单位cm
PetalLengthCm: 花瓣长度, 单位cm
PetalWidthCm; 花瓣宽度, 单位cm
Species: 鸢尾花种类.
2.3 查看数据整体信息
#查看数据整体信息
df_Iris.info()
RangeIndex: 150 entries, 0 to 149
Data columns (total 6 columns):
Id 150 non-null int64
SepalLengthCm 150 non-null float64
SepalWidthCm 150 non-null float64
PetalLengthCm 150 non-null float64
PetalWidthCm 150 non-null float64
Species 150 non-null object
dtypes: float64(4), int64(1), object(1)
memory usage: 7.1+ KB
得出信息: 150行, 6列,4个64位浮点数, 1个64位整型, 1个python对象, 数据中无缺失值.
2.4 描述性统计
df_Iris.describe()
花萼长度最小值4.30, 最大值7.90, 均值5.84, 中位数5.80, 右偏
花萼宽度最小值2.00, 最大值4.40, 均值3.05, 中位数3.00, 右偏
花瓣长度最小值1.00, 最大值6.90, 均值3.76, 中位数4.35, 左偏
花瓣宽度最小值0.10, 最大值2.50, 均值1.20, 中位数1.30, 左偏
按中位数来度量: 花萼长度 > 花瓣长度 > 花萼宽度 > 花瓣宽度
#注意这里是大写的字母O, 不是数字0.
df_Iris.describe(include =['O']).T
总数150, 3个种类, 最大频数为50, 也就是每种都为50个. 注意top里的指的不是Iris-versicolor最多, 是在频数相同的基础上按照字符串长度进行排名.
可以通过这样对每种进行计数:
df_Iris.Species.value_counts()
Iris-versicolor 50
Iris-virginica 50
Iris-setosa 50
Name: Species, dtype: int64
通过以上, 大致了解数据的基本信息, 现想把Species特征中的'Iris-'字符去掉, 进入特征工程环节.
3. 特征工程
3.1 数据清洗
去掉Species特征中的'Iris-'字符.
#第一种方法: 替换#df_Iris['Species']=