认识数据: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,如果做对比的话,还要想清楚z
fig = 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号
파이팅!