2014-04-16 09:28:04 oMuYeJingFeng1 阅读数 8511
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2340 人正在学习 去看看 阿勒拉哈

最近大数据竞赛很火,本人python没学多久,想试着写一下,只是实现了数据的处理,主要用到了dict,list,file知识

还有一点要说,我也用matlab实现了,但是运行完要差不多两分钟,但是python秒处理,有木有啊,足见python处理文本功能之强大


文件里的数据格式:

clientid      shopingid      num    date

1111000   3873             2          4月5日

clientinfo = []
shopinginfo = {}
month={}
day={}
shopidflag = 0
clientstartflag = 0
total={}
tmpclientid=''
output= open('f:/a.txt','a')
with open('f:/s.txt','r') as data_file:
    for lineinfo in data_file:
        lineinfo = lineinfo.split()
        clientid = lineinfo[0]
        shopingid = lineinfo[1]
        num=[]
        num.append(lineinfo[2])
        data = lineinfo[3]
        data = data[:-1]
        data = data.split('月')
        monthvar=[]
        monthvar.append(data[0])
        dayvar=[]
        dayvar.append(data[1])
        
        if clientid in clientinfo and shopingid in shopinginfo and int(data[0])>=6:
            shopinginfo[shopingid].append(lineinfo[2])
            month[shopingid].append(data[0])
            day[shopingid].append(data[1])
        elif clientid in clientinfo and shopingid not in shopinginfo and int(data[0])>=6:
            shopinginfo[shopingid]=num
            month[shopingid]= monthvar
            day[shopingid] = dayvar
        elif clientid not in clientinfo :
            #if clientstartflag  == 1: 
            clientflag = 0
            shopinglink=''
            for (k, v) in shopinginfo.items():
                total={}
                vote=0
                for  i  in v:
                    if  i  in total:
                        total[i]+=1
                    else:
                        total[i]=1      
                for var in total:
                    if var == '0':
                        vote += total[var]
                    elif var == '1':
                        vote = 0
                        break 
                    elif var == '2':
                        vote += total[var]*2
                    else:
                        vote += total[var]*3
                    if vote >= 3:
                        if clientflag == 0:
                            output.write(tmpclientid+'\t')
                            clientflag =1
                        shopinglink+=k+','
            if clientflag == 1:
                output.write(shopinglink.strip(',')+'\r\n')
            shopinginfo={}
            month ={}
            day ={}
            clientinfo=[]
            tmpclientid=clientid
            clientinfo.append(clientid)
            shopinginfo[shopingid]=num
            month[shopingid] = monthvar
            day[shopingid] = dayvar
    shopinglink=''
    for (k, v) in shopinginfo.items():
        for  i  in v:
            if  i  in total:
                total[i]+=1
            else:
                total[i]=1
        total={}
        vote=0
        for  i  in v:
            if  i  in total:
                total[i]+=1
            else:
                total[i]=1      
        for var in total:
            if var == '0':
                vote += total[var]
            elif var == '1':
                vote = 0
                break 
            elif var == '2':
                vote += total[var]*2
            else:
                vote += total[var]*3
        if vote >= 3:
            if clientflag == 0:
                clientflag =1
            shopinglink+=k+','
    if clientflag == 1:
        output.write(tmpclientid+'\t')
        output.write(shopinglink.strip(','))
    data_file.close()
    output.close()


2019-05-03 21:29:45 xuexijiaqq3533076323 阅读数 139
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2340 人正在学习 去看看 阿勒拉哈

如果你有个5、6 G 大小的文件,想把文件内容读出来做一些处理然后存到另外的文件去,你会使用什么进行处理呢?不用在线等,给几个错误示范:有人用multiprocessing 处理,但是效率非常低。于是,有人用python处理大文件还是会存在效率上的问题。因为效率只是和预期的时间有关,不会报错,报错代表程序本身出现问题了~

 Python学习群:692649595,有大牛答疑,有资源共享!是一个非常不错的交流基地!欢迎喜欢Python的小伙伴!

 

所以,为什么用python处理大文件总有效率问题?

如果工作需要,立刻处理一个大文件,你需要注意两点:

01、大型文件的读取效率
面对100w行的大型数据,经过测试各种文件读取方式,得出结论:

with open(filename,"rb") as f:
 for fLine in f:
 pass
方式最快,100w行全遍历2.7秒。

基本满足中大型文件处理效率需求。如果rb改为r,慢6倍。但是此方式处理文件,fLine为bytes类型。但是python自行断行,仍旧能很好的以行为单位处理读取内容。

02、文本处理效率问题
这里举例ascii定长文件,因为这个也并不是分隔符文件,所以打算采用列表操作实现数据分割。但是问题是处理20w条数据,时间急剧上升到12s。本以为是byte.decode增加了时间。遂去除decode全程bytes处理。但是发现效率还是很差。

最后用最简单方式测试,首次运行,最简单方式也要7.5秒100w次。

想知道这个方式处理的完整代码是什么吗?扫描文末二维码,联系小编可以获取哦~

那么关于python处理大文件的技巧,从网络整理三点:列表、文件属性、字典三个点来看看。

1.列表处理
def fun(x):尽量选择集合、字典数据类型,千万不要选择列表,列表的查询速度会超级慢,同样的,在已经使用集合或字典的情况下,不要再转化成列表进行操作,比如:

values_count = 0
# 不要用这种的
if values in dict.values():
 values_count += 1
# 尽量用这种的
if keys,values in dict:
 values_count += 1
后者的速度会比前者快好多好多。

2. 对于文件属性
如果遇到某个文件,其中有属性相同的,但又不能进行去重操作,没有办法使用集合或字典时,可以增加属性,比如将原数据重新映射出一列计数属性,让每一条属性具有唯一性,从而可以用字典或集合处理:

 return '(' + str(x) + ', 1)'
list(map(fun,[1,2,3]))
使用map函数将多个相同属性增加不同项。

3. 对于字典
多使用iteritems()少使用items(),iteritems()返回迭代器:

>>> d = {'a':1,'b':2}
>>> for i in d.items() :
.... print i
('a',1)
('b',2)
>>> for k,v in d.iteritems() :
... print k,v
('a',1)
('b',2)
字典的items函数返回的是键值对的元组的列表,而iteritems使用的是键值对的generator,items当使用时会调用整个列表 iteritems当使用时只会调用值。

除了以下5个python使用模块,你还有什么技巧解决大文件运行效率的问题吗?扫一扫来和我们一起交流,深入了解更多Python实用模块,快速提升工作效率~

读写文件技术,今后会用到测试数据的参数化和测试报告写作功能中~

数据处理技术,今后测试脚本的测试数据处理过程可以用到~

数据统计分析技术,今后会在测试结果分析中用到

图表展示技术,在今后的测试框架中相关测试报告会用到

程序自动触发技术,可用于测试脚本程序的自动执行。
 

Python学习群:692649595,有大牛答疑,有资源共享!是一个非常不错的交流基地!欢迎喜欢Python的小伙伴!

2019-05-27 19:13:25 Charein 阅读数 887
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2340 人正在学习 去看看 阿勒拉哈

本书特色

用传统的电子表格来处理数据不仅效率低下,而且无法处理某些格式的数据,对于混乱或庞大的数据集更是束手无策。本书将教你如何利用语法简单、容易上手的Python轻松处理数据。作者通过循序渐进的练习,详细介绍如何有效地获取、清洗、分析与呈现数据,如何将数据处理过程自动化,如何安排文件编辑与清洗任务,如何处理更大的数据集,以及如何利用获取的数据来创作引人入胜的故事。学完本书,你的数据处理和分析能力将更上一层楼。

  • 快速了解Python基本语法、数据类型和语言概念
  • 概述数据的获取与存储方式
  • 清洗数据并格式化,以消除数据集中的重复值与错误
  • 学习何时对数据进行标准化,何时对数据清理进行测试并将其脚本化
  • 使用Scrapy写网络爬虫
  • 利用新的Python库和技术对数据集进行探索与分析
  • 使用Python解决方案将整个数据处理过程自动化

“如果你一直感觉电子表格(甚至关系型数据库)无法回答你想要提出的问题,或者除这些工具之外你准备进一步学习,那么这本书非常适合你。我一直在等待这本书的出现。”

——Derek Willis,ProPublica新闻应用开发者,OpenElections联合创始人

“所有新手数据科学家、数据工程师或其他技术方面的数据专家都应该读一读这本实践指南。数据处理领域正需要这样一本书,真希望我第一次开始用Python处理数据时就能有它指导。”

——Tyrone Grandison博士,Proficiency Labs Intl. CEO

目录

版权声明
O’Reilly Media, Inc.介绍
本书赞誉
前言
第 1 章 Python 简介
第 2 章 Python 基础
第 3 章 供机器读取的数据
第 4 章 处理 Excel 文件
第 5 章 处理 PDF 文件,以及用 Python 解决问题
第 6 章 数据获取与存储
第 7 章 数据清洗:研究、匹配与格式化
第 8 章 数据清洗:标准化和脚本化
第 9 章 数据探索和分析
第 10 章 展示数据
第 11 章 网页抓取:获取并存储网络数据
第 12 章 高级网页抓取:屏幕抓取器与爬虫
第 13 章 应用编程接口
第 14 章 自动化和规模化
第 15 章 结论
附录 A 编程语言对比
附录 B 初学者的 Python 学习资源
附录 C 学习命令行
附录 D 高级 Python 设置
附录 E Python 陷阱
附录 F IPython 指南
附录 G 使用亚马逊网络服务
关于作者
关于封面

下载

https://pan.baidu.com/s/1B2H_CxsXfnjRouxU6bCTRw

2018-08-23 18:41:45 a40850273 阅读数 243
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2340 人正在学习 去看看 阿勒拉哈

Python 数据处理

数据的读取与保存

当路径或文件中包含中文时,需要额外指定 engine 为 python

import pandas as pd
data = pd.read_csv(data_path, sep=' ', header=None)
data.to_csv(rlt_path, header=0, index=0, sep=' ')

data = pd.read_csv(data_path, engine='python')

DataFrame 按列差分

只对于 Series 和 DataFrame 存在这个函数。对于 ndarray 可以先转成 Series 或 DataFrame 再进行处理。

d_vel = abs(data.diff()).fillna(method='bfill')

数据插值

interp1d 函数通过传入的横纵坐标数据拟合并返回一个函数。这个函数可以接受一个序列作为输入,并返回相应大小的拟合插值。

from scipy.interpolate import interp1d

function = interp1d(range(N), data[i], kind='quadratic') # interp1d(x, y) 一维插值
fdata = function(np.linspace(0, N-1, INSERT_N * N))

这个函数只能对给定值范围内的点进行插值,如果需要预测的点超过范围将返回 ValueError 异常。此时可以使用 interp 函数。

from scipy import interp, arange, exp

x = arange(0, 10)
y = exp(-x/3.0)


interp([9, 10], x, y)
# array([0.04978707, 0.04978707])

不过该函数只是将超过范围的预测值赋值为边缘的两个值。如果需要更复杂的要求,可以通过自行编写函数实现。

中值滤波

用该点周围指定范围内的值的中位数来代替该点的值

import scipy.signal as signal

x_med = signal.medfilt(x, 3) # 核为3

分位数计算

percentile 函数根据传入的数据,给出对应 25%、50%和75%的分位数

import numpy as np

per = np.percentile(x, [25, 50, 75])

离散信号的极值点

import scipy.signal as signal

extreme_geater = signal.argrelextrema(data, np.greater) # 给出的是位置标号
extreme_less = signal.argrelextrema(data, np.less)

绘图使用两个独立的坐标轴

import matplotlib.pyplot as plt

plt.figure()
ax1 = plt.subplot(111)
ax1.plot(range(N), f_data[12])
ax2 = ax1.twinx() # 独立两个y轴,x轴用twiny()
ax2.plot(range(N), data[12])

 

2019-05-27 08:51:32 sunyaowu315 阅读数 196
  • Python数据分析实战-Pandas

    深度学习、机器学习和数据分析必须用pandas。pandas是在python直接流行的数据处理框架。可以说,如果不会使用pandas,就谈不上会用python做数据分析。本课程会使用奥林匹克一个真实的数据作为实验数据,从初级到各种pandas的常用操作,到常用的数据可视化,让你在短的时间内掌握好pandas,轻松愉快的玩转数据分析。

    2340 人正在学习 去看看 阿勒拉哈
def missing_delete_var(df, threshold=None):
    """
    df:数据集
    threshold:缺失率删除的阈值

    return :删除缺失后的数据集
    """
    df2 = df.copy()
    missing_df = missing_cal(df)
    missing_col_num = missing_df[missing_df.missing_pct >= threshold].shape[0]
    missing_col = list(missing_df[missing_df.missing_pct >= threshold].col)
    df2 = df2.drop(missing_col, axis=1)
    return df2


def missing_delete_user(df, threshold=None):
    """
    df:数据集
    threshold:缺失个数删除的阈值

    return :删除缺失后的数据集
    """
    df2 = df.copy()
    missing_series = df.isnull().sum(axis=1)
    missing_list = list(missing_series)
    missing_index_list = []
    for i, j in enumerate(missing_list):
        if j >= threshold:
            missing_index_list.append(i)
    df2 = df2[~(df2.index.isin(missing_index_list))]
    return df2


def const_delete(df, col_list, threshold=None):
    """
    df:数据集
    col_list:变量list集合
    threshold:同值化处理的阈值

    return :处理后的数据集
    """
    df2 = df.copy()
    const_col = []
    for col in col_list:
        const_pct = df2[col].value_counts().iloc[0] / df2[df2[col].notnull()].shape[0]
        if const_pct >= threshold:
            const_col.append(col)
    df2 = df2.drop(const_col, axis=1)
    return df2


def missing_cal(df):
    """
    df :数据集

    return:每个变量的缺失率
    """
    missing_series = df.isnull().sum() / df.shape[0]
    missing_df = pd.DataFrame(missing_series).reset_index()
    missing_df = missing_df.rename(columns={'index': 'col',
                                            0: 'missing_pct'})
    missing_df = missing_df.sort_values('missing_pct', ascending=False).reset_index(drop=True)
    return missing_df


def data_processing(df, target):
    """
    df:包含了label和特征的宽表

    return:
    df :清洗后的数据集
    """
    # 特征缺失处理
    df = missing_delete_var(df, threshold=0.8)
    # 样本缺失处理
    df = missing_delete_user(df, threshold=int(df.shape[1] * 0.8))
    col_list = [x for x in df.columns if x != target]
    # 常变量处理
    df = const_delete(df, col_list, threshold=0.9)
    desc = df.describe().T
    # 剔除方差为0的特征
    std_0_col = list(desc[desc['std'] == 0].index)
    if len(std_0_col) > 0:
        df = df.drop(std_0_col, axis=1)
    df.reset_index(drop=True, inplace=True)

    # 缺失值计算和填充
    miss_df = missing_cal(df)
    cate_col = list(df.select_dtypes(include=['O']).columns)
    num_col = [x for x in list(df.select_dtypes(include=['int64', 'float64']).columns) if x != 'label']

    # 分类型特征填充
    cate_miss_col1 = [x for x in list(miss_df[miss_df.missing_pct > 0.05]['col']) if x in cate_col]
    cate_miss_col2 = [x for x in list(miss_df[miss_df.missing_pct <= 0.05]['col']) if x in cate_col]
    num_miss_col1 = [x for x in list(miss_df[miss_df.missing_pct > 0.05]['col']) if x in num_col]
    num_miss_col2 = [x for x in list(miss_df[miss_df.missing_pct <= 0.05]['col']) if x in num_col]
    for col in cate_miss_col1:
        df[col] = df[col].fillna('未知')
    for col in cate_miss_col2:
        df[col] = df[col].fillna(df[col].mode()[0])
    for col in num_miss_col1:
        df[col] = df[col].fillna(-999)
    for col in num_miss_col2:
        df[col] = df[col].fillna(df[col].median())

    return df, miss_df


  对数据分析、机器学习、数据科学、金融风控等感兴趣的小伙伴,需要数据集、代码、行业报告等各类学习资料,可添加微信:wu805686220(记得要备注喔!),也可关注微信公众号:风控圏子(别打错字,是圏子,不是圈子,算了直接复制吧!)

关注公众号后,可联系圈子助手加入如下社群:

  • 机器学习风控讨论群(微信群)
  • 反欺诈讨论群(微信群)
  • python学习交流群(微信群)
  • 研习社资料(qq群:102755159)(干货、资料、项目、代码、报告、课件)

相互学习,共同成长。

python多线程处理数据

博文 来自: kwu_ganymede

来自http://www.xmind.net/m/WvfC/

博文 来自: dogpig945

python数据处理

阅读数 643

没有更多推荐了,返回首页