数据分析
使用Python进行数据分析,在数据预处理方面,python要比R语言有优势。
通过熟悉Python基本的数据处理,以便工作中更好的发挥两者的功效。
首先大体浏览命令,建立起轮廓,然后通过具体的案例,熟悉命令
结构化的数据处理和非结构化的数据处理
--非结构化数据 转换为结构化的数据
数据示例
数据示例:studentid','interval','countNum
201 1 1
201 5 1
140 1 7
140 1 2
140 2 1
pandas数据结构
Series 数据和索引 data-index
DataFrame 表格型数据结构
嵌套字典
程序代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #! /usr/bin/python
# -*- coding:utf-8 -*-
import pandas as pd
def main():
inpputfile = 'C:\\Users\\yt\\Desktop\\Program\\Date1030-1112.txt'
try:
#读取txt文件
interaldata = pd.read_table(inpputfile, header=None,names=['studentid','interval','countNum'],sep='\t')
#排序
#interaldata.sort_values(by='studentid', ascending=True)
#interaldata.sort_index(axis=1, ascending=True)
#数据转换和去重
uniqdata = interaldata['studentid'].to_frame().drop_duplicates()
#分组,确定分组的组数
grouped = interaldata.groupby(interaldata['interval'])
mergerK = len(grouped['interval'].count())
#联结-组数上+1<从0开始>
#联结的重复列名处理 -- suffixes-追加到重叠列名末尾
#middata = pd.merge( middata , interaldata[ interaldata['interval']==2], on='studentid' ,how='left',suffixes=('_left','-right'))
middata = pd.merge( uniqdata , interaldata[ interaldata['interval']==1], on='studentid' ,how='left')
for ange in range(2,(mergerK+1)):
middata = pd.merge(middata,interaldata[ interaldata['interval']==ange], on='studentid' ,how='left')
# 将NAN替换为0
outdata = middata.fillna(0)
#列数
KK = outdata.shape[1] #outdata.shape[0]行数
colodd= range(1,KK,2)
#特定位置添加列表元素
colodd.insert(0,0)
colevent = range(0,KK,2)
tmpdata = outdata.ix[:,colodd]
#数据类型转换
resultdata = outdata.ix[:,colevent]
resultdata.ix[:,range(1,resultdata.shape[1])] = resultdata.ix[:,range(1,resultdata.shape[1])] .astype('int')
#保存数据-去掉列名
resultdata.to_csv("C:\\Users\\yt\\Desktop\\Program\\submission.csv", index=False,header=False)
except IOError:
print("错误文件")
else:
print('Processing')
finally:
try:
print "again
except NameError:
print "again"
if __name__ == "__main__":
main()
##本程序中异常处理功能报错,这部分先放这,待需要时在修正
01.#两个对象的列名不同,可以分别指定,例:pd.merge(df1,df2,left_on='lkey',right_on='rkey')
#middata.rename(columns={'interval_x':'a', 'interval_y':'c'}, inplace = True)
02.
interaldata[0:2] #选取多个行
interaldata.ix[[0,2,4,5,7],[1,2]] #ix 的功能就更强大了,它允许我们混合使用下标和名称进行选取
interaldata.irow(0) #取data的第一行
interaldata. iloc(0) #取data的第一列
interaldata.iat[1,1] #选取第二行第二列,用于已知行、列位置的选取
# iloc 使得我们可以对column使用slice(切片)的方法对数据进行选取
|
帮助信息
help(resultdata.to_csv) 帮助我们了解该对象的更多信息
dir(resultdata) 帮助我们获取该对象的大部分相关属性。
pandas输入和输出
文件类型和格式 文本文件 二进制文件 数据库 网页
=文件类型和格式 - 函数-输入参数-输出格式
01.函数
pandas.read_table()
pandas.read_csv()
……
02.参数
索引
index_col
标题 header
列名 names
跳过文件行
skiprows
skip_footer
分割符 sep
缺失值默认处理:na_values
读取大文件--只读几行nrows
chunksize --逐快读取文件-设置行数 chunksize=1000
iterator
编码
encoding
03.输出格式
存储
-- Dataframe Series
pandas.to_csv()
pandas.save()
Pandas 数据操作
并集-outer 交集-inner
pandas.concat(,axis=0) 行
pandas.concat(,axis=1) 列
outdata.shape[0] #行数
outdata.shape[1] #列数
reindex
比较
01.函数
函数 调用 比如 len() type 函数式代码组织和复用的方式,
函数的作用空间,函数亦对象
对象方法 调用
对象属性
02.传递方式
01.Python
001.可变对象
对变量赋值时,是按照引用传递,即创建等号右侧对象的一个引用,赋值==绑定 binding
按照 引用传递 -- 即Python函数可以修改其参数的内容
002.不可变对象
02.R语言
按照值传递 -- 创建副本
03.C语言
按 值传递 的意思就是,传入的数据仅仅是数据的值
表现:按值传递方法原本的数据不会有变化
按 引用传递<地址传递> 的意思就是,直接把数据的地址传进去
表现:按引用传递的话,可以修改原数据
03. 大部分是严格求值
迭代器和生成器等是懒惰求值 Lazy Evaluation
匿名函数 lambda
闭包 closure currying 柯里化