寒假计划之十篇博客第一篇——认识数据:pandas和matplotlib学习
2018-01-26 17:41
281 查看
认识数据:pandas和matplotlib学习
flag:寒假要写十篇博客,促使自己更好的学习扯扯一些概念
这个博客主要用于基础的数据分析,比较适合画机器学习做特征工程前,查看如何提取特征的图主要学习pyplot的包的使用,所以说这篇总结并不是为了画出美丽的图,而是看出数据如何更好的变成特征,认识数据
import matplotlib as mpl import matplotlib.pyplot as plt import pandas as pd
首先要注意的就是pandas里面内置的是matplotlib包的,这个可以查看pandas的源码,先不管pandas,直接用matplot画图,是这个样子的
# 通过rcParams设置全局横纵轴字体大小 mpl.rcParams['xtick.labelsize'] = 2 mpl.rcParams['ytick.labelsize'] = 24
一些基础的常见函数要记得:
# 一定要加上这句才能让画好的图显示在屏幕上 plt.show() # 将当前figure的图保存到文件result.png plt.savefig('result.png')
比较重要的是常见的图和其英文名称要对应上:
# 散点图两种形式 # '.'标明画散点图,每个散点的形状是个圆 plt.plot(x, y_data, '.') # scatter可以更容易地生成散点图 plt.scatter(x, y_data) # 折线图 # 画模型的图,plot函数默认画连线图 plt.plot(x, y) #饼状图 plt.pie() #条形图 #竖着的条 plt.bar() #横着的条 plt.barh() #盒形图 plt.box() #直方图 plt.hist() #核密度估计图 kde #地区图 area
有可能会出现中文显示不出来的情况,解决思路:
font = FontProperties(fname=r"/Library/Fonts/Songti.ttc", size=8) ...... plt.title(u"获救情况 (1为获救)", fontproperties=font) # 标题 plt.ylabel(u"人数", fontproperties=font)
具体做图,千万记住要以pandas为主体,不要凌驾于pandas,直接用matplot会很累,pandas基本算是装python的默认包之一
Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
pandas常用函数查询
做图流程
1.下面这三句话可以作为做项目和比赛的开端,
data_train = pd.read_csv("train.csv") print(data_train.info()) print(data_train.describe())
上面这两个方法其实已经能看出很多东西,均值、标准差和一些基本的数据特征,这些可以作为你具体做图的前提条件,让你知道你想做那些特征的图
2. 做图
首先声明一些铺垫,而且你要明白有时候你想看的直接是数据的分布,有些是数据统计的分布,而且不要为了画图而画图,要想好你的x,你的y,如果做对比的话,还要想清楚zfig = plt.figure() fig.set(alpha=0.2) # 设定图表颜色alpha参数 fig.suptitle("总标题", fontsize=16, x=0.5,y=0.05)
一般用子图放在一张图里,保存下来,这个有很多种方法,
套路1:x关于y的分布,取出一列数据看x的统计分布,data——value_counts——plot定义图的类型
data_train[‘Survived’].value_counts().plot(kind=’pie’)
套路2:拥有x,y两种数据,散点图或者kde的密度图看原始分布
plt.scatter(data_train.Survived, data_train.Age)
套路3:不同的x关于y的分布,
data_train.Age[data_train.Pclass == 1].plot(kind=’kde’)
data_train.Age[data_train.Pclass == 2].plot(kind=’kde’)
data_train.Age[data_train.Pclass == 3].plot(kind=’kde’)
# plt.subplot2grid((2, 3), (0, 0)) data_train['Survived'].value_counts().plot(kind='pie') plt.title(u"获救情况 (1为获救)", fontproperties=font) # 标题 plt.ylabel(u"人数", fontproperties=font) plt.subplot2grid((2, 3), (0, 1)) data_train.Pclass.value_counts().plot(kind="bar") plt.ylabel(u"人数", fontproperties=font) plt.title(u"乘客等级分布", fontproperties=font) plt.subplot2grid((2, 3), (0, 2)) plt.scatter(data_train.Survived, data_train.Age) plt.ylabel(u"年龄", fontproperties=font) # 设定纵坐标名称 plt.grid(b=True, which='major', axis='y') plt.title(u"按年龄看获救分布 (1为获救)", fontproperties=font) plt.subplot2grid((2, 3), (1, 0), colspan=2) data_train.Age[data_train['Pclass'] == 1].plot(kind='kde') data_train.Age[data_train.Pclass == 2].plot(kind='kde') data_train.Age[data_train.Pclass == 3].plot(kind='kde') plt.xlabel(u"年龄", fontproperties=font) # lots an axis lable plt.ylabel(u"密度", fontproperties=font) plt.title(u"各等级的乘客年龄分布", fontproperties=font) plt.legend((u'1', u'2', u'3')) # sets our legend for our graph. plt.subplot2grid((2, 3), (1, 2)) plt.scatter(data_train.Fare, data_train.Survived) plt.xlabel('nfare') plt.ylabel('num') plt.title('fare与survive的关系', fontproperties=font)
这个方法一定要用,不然布局很扯淡
plt.tight_layout(pad=1, w_pad=1, h_pad=1) plt.show()
3.合并在一起的图
上面的kde图还是原始分布图放在一起,如果是统计分布放在一起就是下面这种套路,需要使用pd.DataFrame,然后放在一起fig = plt.figure() fig.set(alpha=0.2) # 设定图表颜色alpha参数 Survived_0 = data_train.Embarked[data_train.Survived == 0].value_counts() Survived_1 = data_train.Embarked[data_train.Survived == 1].value_counts() df=pd.DataFrame({u'获救':Survived_1, u'未获救':Survived_0}) df.plot(kind='bar', stacked=True) plt.title(u"各登录港口乘客的获救情况") plt.xlabel(u"登录港口") plt.ylabel(u"人数") plt.show()
4.分组查看分布
这种手段也不错,但是需要对数据有想象力,就是看到数字要形成画面感g = data_train.groupby(['SibSp','Survived']) df = pd.DataFrame(g.count()['PassengerId']) print(df)
缺失值作为一个维度统计
fig = plt.figure() fig.set(alpha=0.2) # 设定图表颜色alpha参数 Survived_cabin = data_train.Survived[pd.notnull(data_train.Cabin)].value_counts() Survived_nocabin = data_train.Survived[pd.isnull(data_train.Cabin)].value_counts() df=pd.DataFrame({u'有':Survived_cabin, u'无':Survived_nocabin}).transpose() df.plot(kind='bar', stacked=True) plt.title(u"按Cabin有无看获救情况") plt.xlabel(u"Cabin有无") plt.ylabel(u"人数") plt.show()
到这基本可以做到对数据从各种角度去看其统计分布,相关性分布等等,然后形成坐特征工程的思路。
第二篇我要把吴恩达的deep learning的课程总结出来一篇,deadline是1月31号
파이팅!
相关文章推荐
- Python的第一篇博客,对于Python的认识。
- 第一篇博客 想说发现51CTO修改数据后更新不同步
- 了解与全面认识SQL Server 2005数据维护计划
- 我的第一篇博客——软件缺陷粗浅认识及白盒测试举例
- 第一篇博客 写一下我这学期的部分计划
- 第一篇博客,线性表插入数据。
- 第一篇之认识大数据
- 第一篇博客 对安卓的认识
- 第一篇博客,线性表插入数据。
- 这是第一篇博客
- 写在前面——第一篇原创博客
- 第一篇博客
- 人生的第一篇博客
- 【我的第一篇android博客】教育网中使用repo下载android源代码
- 我的第一篇博客,程序员之成长日记
- FPGA认识相关 来自jimfan博客
- 聚焦数据可视化之一--沃尔马如何利用数据可视化根据实时社交数据调整采购和仓储计划?
- 关于数据仓库的认识误区
- 数据结构与算法的基本认识