20150926kaggle Titanic入门篇excel&python

1 excel数据透视表

这里主要是讲述了一下插入里面的数据透视表常用功能,数据透视表十分方便,比直接筛选还要简单,看数据很直观,这里大力推荐。

2 python&pandas

这里主要是讲述了pandas的一些基本用法,直接上代码吧。

2.1 pandas dataframe

文章所述pandas和R语言一样有dataframe,对于分析处理数据十分方便。

import pandas as pd
import numpy as np

##pandas自带读入csv的函数
df = pd.read_csv('train.csv', header=0)
print df

##查看数据前3行
print df.head(3)

##df类型为pandas.core.frame.DataFrame
print type(df)

##打印df各列数据类型
print df.dtypes

##打印df各列数据详细情况
print df.info()

##打印各列数据总数,均值,方差,最小值等等
print df.describe()

2.2 数据处理

print df['Age'][0:10]
print type(df['Age'])
print df['Age'].mean()

##以下是df里面筛选数据的各种用法
print df[ ['Sex', 'Pclass', 'Age'] ]
print df[df['Age'] > 60]
print df[df['Age'] > 60][['Sex', 'Pclass', 'Age', 'Survived']]
print df[df['Age'].isnull()][['Sex', 'Pclass', 'Age']]

for i in range(1,4):
    print i, len(df[ (df['Sex'] == 'male') & (df['Pclass'] == i) ])

import pylab as P
df['Age'].hist()
P.show()

df['Age'].dropna().hist(bins=16, range=(0,80), alpha = .5)
P.show()

2.3清洗数据

##给df增添一列数据,并赋值
df['Gender'] = 4
df['Gender'] = df['Sex'].map( lambda x: x[0].upper() )
df['Gender'] = df['Sex'].map( {'female': 0, 'male': 1} ).astype(int)

##求出满足df['Gender'] == i) & (df['Pclass'] == j+1)的各列数据去掉null后的均值,然后用其填充数据
median_ages = np.zeros((2,3))
for i in range(0, 2):
    for j in range(0, 3):
        median_ages[i,j] = df[(df['Gender'] == i) & (df['Pclass'] == j+1)]['Age'].dropna().median()
df['AgeFill'] = df['Age']
print df.head()
print df[ df['Age'].isnull() ][['Gender','Pclass','Age','AgeFill']].head(10)
for i in range(0, 2):
    for j in range(0, 3):
        df.loc[ (df.Age.isnull()) & (df.Gender == i) & (df.Pclass == j+1),'AgeFill'] = median_ages[i,j]
print df[ df['Age'].isnull() ][['Gender','Pclass','Age','AgeFill']].head(10)
df['AgeIsNull'] = pd.isnull(df.Age).astype(int)

2.4特征工程

##有各种特征构造的方法,举例两种
df['FamilySize'] = df['SibSp'] + df['Parch']
df['Age*Class'] = df.AgeFill * df.Pclass

2.5最后准备

##删除类型为object的列数据
print df.dtypes
print df.dtypes[df.dtypes.map(lambda x: x=='object')]
df = df.drop(['Name', 'Sex', 'Ticket', 'Cabin', 'Embarked'], axis=1) 
##删除Age这一列数据
df = df.drop(['Age'], axis=1)
##去掉有null的数据
df = df.dropna()
##返回一个数组格式给train_data
train_data = df.values

2.6随机森林

##使用sklearn里面的随机森林算法包
from sklearn.ensemble import RandomForestClassifier 
forest = RandomForestClassifier(n_estimators = 100)
forest = forest.fit(train_data[0::,1::],train_data[0::,0])
output = forest.predict(test_data)
posted @ 2016-07-24 11:13  ericxk  阅读(375)  评论(0编辑  收藏  举报