精华内容
下载资源
问答
  • 联合多重时间序列本身是一件挑战性十足的事,数据样本的不均衡导致了不同时间序列对于模型的影响程度是不同的。拿商品销售为例,销售数量多一个数量级,商品数量就少一个数量级,每个月卖10个的商品如果有100,000种...

    联合多重时间序列本身是一件挑战性十足的事,数据样本的不均衡导致了不同时间序列对于模型的影响程度是不同的。拿商品销售为例,销售数量多一个数量级,商品数量就少一个数量级,每个月卖10个的商品如果有100,000种,每个月卖100个的商品就只有10,000种,每个月卖1000个的商品就只有1000种。(假定此时销售状况满足幂律分布:y = 1,000,000 / x)这种不均衡样本导致输入值的量级差异,商品A每天销售数百个,商品B每天销售数万个,两个商品共同训练时商品A的信息会被忽略掉,因为相对于B而言,A对神经网络参数的影响太低。但是,A时间序列中隐含的信息是有价值的,数百个销售额仍然能够反映季节性和趋势性的变化。
    在这里插入图片描述
    而对于这种样本量级差异的解决方法,需要对商品销售量进行缩放,对应到神经网络中,即输入到神经网络前除以v, 输出后乘以v。(需要确保输入值除以v,进入神经网络在每一个节点计算以及每次迭代后,输出后乘以v,与不进行乘除操作是等价的。)如何选择为每一个商品选择对应的v是一个挑战,实践发现使用商品的历史销量均值是一个不错的选择。
    在这里插入图片描述
    本文转载自:https://amazonaws-china.com/cn/blogs/china/time-series-prediction-with-deep/?nc1=b_rp

    • 小结:
      不同量级的序列除以其均值,均变为在1附近波动的序列,则变为同一量级;如果乘以其均值,则返回到原来的量级和波动性等统计量。

    • 常用数据缩放方法,在特征工程中经常会用到

    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    from sklearn import preprocessing
    
    def plot(data, title):
        sns.set_style('dark')
        f, ax = plt.subplots()
        ax.set(ylabel='frequency')
        ax.set(xlabel='height(blue) / weight(green)')
        ax.set(title=title)
        sns.distplot(data[:, 0:1], color='blue')
        sns.distplot(data[:, 1:2], color='green')
        plt.savefig(title + '.png')
        plt.show()
    
    np.random.seed(42)
    height = np.random.normal(loc=168, scale=5, size=1000).reshape(-1, 1)
    weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)
    
    original_data = np.concatenate((height, weight), axis=1)
    plot(original_data, 'Original')
    
    standard_scaler_data = preprocessing.StandardScaler().fit_transform(original_data)
    plot(standard_scaler_data, 'StandardScaler')
    
    min_max_scaler_data = preprocessing.MinMaxScaler().fit_transform(original_data)
    plot(min_max_scaler_data, 'MinMaxScaler')
    
    max_abs_scaler_data = preprocessing.MaxAbsScaler().fit_transform(original_data)
    plot(max_abs_scaler_data, 'MaxAbsScaler')
    
    normalizer_data = preprocessing.Normalizer().fit_transform(original_data)
    plot(normalizer_data, 'Normalizer')
    
    robust_scaler_data = preprocessing.RobustScaler().fit_transform(original_data)
    plot(robust_scaler_data, 'RobustScaler')
    

    举个例子来看看它们之间的区别,假设一个数据集包括「身高」和「体重」两个特征,它们都满足正态分布,画出原始数据图像为:
    使用1.StandardScaler()缩放,结果为:

    使用2.MinMaxScaler()缩放,结果为:

    使用3.MaxAbsScaler()缩放,结果为:

    使用4.Normalizer()缩放,结果为:

    作者:thothsun
    链接:https://www.zhihu.com/question/20467170/answer/839255695
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    https://www.zhihu.com/question/20467170

    • 其他(0,1)归一化的方法:
      在这里插入图片描述
      上图里f1(x)是普通的(0,1)归一化,每个元素xi之间的相对关系没有被改变;f2(x)又叫softmax,会将较大的元素所占比例继续放大,当x>0时会使各元素的区分度更明显;f3(x)会将较大的元素所占比例压缩,当x>0时会使各元素的区分度更小,差距更小。
    展开全文
  • 现状资料说明: 需求背景介绍: ...3. 处理百万量级以上数据时,整体效率偏低,理想情况的是处理百万量级数据控制在一个小时左右 流程耗时分析: 文件去重后以资产号查询我方账单集合,整体...

     

    现状资料说明:

     

     

    需求背景介绍:

    1. 该文件功能是以 .csv 后缀的文件进行解析后,反查我方数据库表,取出账单后做具体的处理业务

    2. 该文件功能主要分为以下几个环节

    1. 获取URL并下载文件
    2. 文件解析并检查文件数据的有效性及数据去重
    3. 取出文件中的具体业务字段进行查询我方的库表
    4. 根据查询出来的账单做具体的业务处理

    3. 处理百万量级以上数据时,整体效率偏低,理想情况的是处理百万量级的数据控制在一个小时左右

     

    注:该文件处理功能是在单线程的情况下执行,暂时不需要考虑太消耗性能来开多线程的处理方案

     

    流程耗时分析:

     文件去重后以资产号查询我方账单集合,整体是从 7ms ~ 22ms 不等;理论上来说文件数据有多少条就会查询多少次库表

    结论:通过核实代码逻辑,该功能文件的执行文件耗时,均为在查询DB这块占用耗时较多

    如:对到170W+的数据量,需要耗时2个半小时左右执行完。现文件执行流程耗时也算相应合理。也存在要提高文件处理性能的必要性

     

    问题点:

     

    现SQL的查询逻辑等同于

     

    select * from postloan_#xx#_db.t_asset_bill_#y# where Fstatus=1 and Fasset_id=xxxx 

     

    1. 这里是返回的整个账单集合;如 asset_id 对应的数据有12条账单数据,则返回了12条记录的一个list对象

    2. 重新评估业务后,这样的SQL查询是可以进一步优化

    3. 全量字段查询是没有必要的,影响磁盘IO的处理效率

     

    注:该库表为百库十库,库表字段数量超过一百个字段

     

     

    设计方案:

     

    优化思路:


    1. 从查询整个账单集合返回    -->  查询最大期账单返回
    2. 全字段账单数据返回   -->    精简需要字段的返回

     

     

    业务逻辑优化:

     

    1. 获取文件中资产号,通过资产号入参。返回提前结清的账单的最大期数账单对象
    2. 提供该 getSimpleLastTermBillByAssetId 查询方法,mapper 文件的查询SQL同步调整字段精简返回

    -- 根据资产号查询提前结清最大期数的账单(字段精简版本)
    
    select 
    
    Fid,Floan_channel_id,Fasset_id,Fbill_id,Fcus_order_id,Finsure_mode_no,Frepay_term,Freal_repay_data,Freal_repay_type
    
    from
    
    postloan_#xx#_db.t_asset_bill_#y#
    
    where
    
    Fstatus=1 and Fasset_id=xxxx and Floan_term=Frepay_term and freal_repay_type = 30 and Fpostloan_repay_source_type in (0,20)

    3. 获取到我方提前结清的账单对象后(已做字段精简),对符合退保的账单进行组装MQ发出 (现有的处理逻辑中退保校验条件减少)

     

    注:这里是将代码逻辑中的一部分校验条件前置到SQL查询中实现,减少业务代码逻辑

     

    效率提升效果:

     

    扣款回盘文件退保性能提升需求(线上观察)
    a.整体文件处理性能提升 100~110%
    b.账单查询优化后由 7~22ms 下降到 2~6ms

     

     

    优化总结:

    1. 通常情况下程序中文件处理效率低,都是在解析文件的过程中有查询DB的情况;若只是解析文件做业务处理话,百万量级的数据也就只是几秒钟程序就能跑完

    2. 数据库表查询,若非必要,应当根据业务使用场景;第一优先选择为需要字段SQL查询来提高查询效率,减少磁盘IO与内存的消耗

     

     

    参考资料:

    MySQL:查询字段数量多少对查询效率的影响  http://blog.itpub.net/7728585/viewspace-2668552/

     

     

     

     

     

    展开全文
  • 【记录】百万量级数据处理

    千次阅读 2017-02-20 09:49:48
    某次需求将一个文件夹内的几千个文件中的数据导入到SqlServer,每个文件有1000+条数据 基本想法是用php遍历一下读出来再写进MySQL(SqlServer是服务器上的不对外,同在服务器的MySQL对外),最后从MySQL导入到Sql...

    某次需求将一个文件夹内的几千个文件中的数据导入到SqlServer,每个文件有1000+条数据
    基本想法是用php遍历一下读出来再写进MySQL(SqlServer是服务器上的不对外,同在服务器的MySQL对外),最后从MySQL导入到SqlServer。

    数据大概是这样的:
    这里写图片描述

    这里写图片描述

    理想很丰满 现实很骨感
    在简单的思考后开始着手去做 结果碰到了不少坑 在这里记录一下并标记一些细节地方

    首先想到对数据库进行基本的处理
    将每个文件中多余的第一行及最后一行去掉后另外保存
    将每行数据规范化

      $files= scandir($dir);
      for($i=0;$i<count($files);$i++){
        //handlefile
      }
    

    这里需要注意的是 在目录中除了要处理的文件再没有其他文件夹的情况下 仍会多遍历2次
    var_dump(files)会发现该数组中会包含两个名为“.”和“..”的元素若再处理文件时需要用到‘files)会发现该数组中会包含两个名为“ . ”和“..”的元素 若再处理文件时需要用到`files)...i`则需考虑先处理下数组 剔除掉待处理文件以外的元素

    处理好后得到纯净的数据文本 接下来只要循环读取然后写进数据库就可以了

    	public function insert()
    	{
    		$fall =fopen("./file/data/all.txt",'r');
    		$i=0;
    		$c = 0;
    		while(!feof($fall)){
    			
    			$i++;
    			$code = fgets($fall);
    			
    			$c = doit($i,$c,$code);
    			$c++;
    			
    			ob_flush();flush();
    		}
    
    		fclose($fall); 
    		echo "OK";      
    
    	}
    
    	function doit($i,$c,$code){
    		$gcode = $code;
    		$dir="./file/data/d/";
    		$files= scandir($dir);
    		$dir2="./file/data/c/";
    		if((int)$files[$c] !=0){
    
    			$fname = $dir.$files[$c];
    			$f1=fopen($fname,'r');
    			while(!feof($f1)){
    
    				$line=fgets($f1);
    		
    				$datas = explode(' ',$line);//这里按空格分割
    				if(isset($datas[0]) || 
    				isset($datas[2]) || 
    				isset($datas[3]) || 
    				isset($datas[4]) || 
    				isset($datas[5]) || 
    				isset($datas[6])){ 
    				
    					//do INSERT
    					
    					if($e = mysql_error()){
    						echo $e;
    						exit;
    					}
    				}
    				ob_flush();flush();
    			}
    		}else{
    			$c++;
    			doit($i,$c,$code);
    		}	
    		return $c;
    	}
    
    

    (实际情况复杂了一点 用了递归)

    随后便出现了MySQL以及PHP的内存问题及超时问题
    在网上查资料修改了一些MySQL及PHP的配置
    在代码中加入了

    		ini_set('max_execution_time', '0');
    		ini_set('memory_limit','2048M');
    		set_time_limit(0);
    

    mysql> set global max_allowed_packet = 2*1024*1024*10

    解决后继续 花了几个小时终于导完了

    做了一下简单的查询发现了问题 有一个字段固定只有6位字符的 但按 where code=‘xxxxxx’查询查询不到 按code like ‘%xxxxxx%’却可以 那么这里面一定夹杂了看不见的字符 查 len(code)发现有8位…
    那么这个问题是怎么产生的呢
    前面的数据可以看到 用文本文档打开或用notepad这类编辑器打开看到的都是那样 我便以为里面同时包含空格和tab制表符 而实际上全都是tab。。 (:зゝ∠)
    于是在处理时造成了上面的问题

    最后折腾一番用SSMA从MySQL导入到了SqlServer,这里要注意SSMA的版本 太低的版本会识别不了高版本的MySQL ODBC驱动程序 | 如SSMA 2008就识别不了MySQL5.1 的驱动只能识别3.5的

    最后当然要检查数据了 做了一些查询对照原始数据。。 结果发现有一部分差的很远且没有规律 27.21这样的数会变成8846.95这样的。。。/(ㄒoㄒ)/~~

    一步步反推回来看发现 在第二步处理数据时就出现这个问题了即从一个标题文件中循环读取标题然后每个标题对应数据文件夹中的一个文件的全部数据 缘由不明 总之需要重新开始了

    经过首次尝试后 发现数据写入数据库的耗时太长 平均一秒钟只写进30条 后修改了方案
    当然再此之前对数据做了准确的规范化处理

    		ob_start();
    		error_reporting(E_ALL);
    		ini_set('display_errors', '1');
    		ini_set('output_buffering', 'On');
    		ini_set('max_execution_time', '0');
    		ini_set('memory_limit','2048M');
    		set_time_limit(0);
    		
    		$num = 0;
    		$add_num = 50;
    		$num = $_REQUEST['n'];
    		$sql = "INSERT INTO table (v1,v2,v3,v4,v5,v6,v7,v8) VALUES ";
    		$dir="./file/data/b/";
    		$i=1;
    		
    		$files = scandir($dir);
    		sort($files);
    		if($num+$add_num>count($files)){
    			$nnum = count($files);
    		}else{
    			$nnum = (int)$num+(int)$add_num;
    		}
    		
    		
    		for($i=$num;$i<$nnum;$i++){
    			if(strlen($files[$i])>5){
    				$fname = $dir.$files[$i];
    				$f1=fopen($fname,'r');
    				while(!feof($f1)){
    
    					$line=fgets($f1);
    
    					$datas = explode('	',$line);//这里以Tab分割
    					if(isset($datas[0]) || isset($datas[1]) || isset($datas[2]) || isset($datas[3]) || isset($datas[4]) || isset($datas[5]) || isset($datas[6])){ 
    						$sql .= "('".$datas[0]."','".$datas[1]."','".$datas[2]."','".$datas[3]."','".$datas[4]."','".$datas[5]."','".$datas[6]."','".substr($files[$i],0,6)."'),";
    
    					}
    				
    				}
    			}
    			//ob_flush();flush();	
    		}
    		$sql = substr($sql,0,strlen($sql)-1);
    
    		mysql_query($sql);
    
    		if($e = mysql_error()){
    			echo "<br>==========================================<br>";
    			echo $e;
    			echo "<br>==========================================<br>";
    			exit;
    		}
    		header('Location:'.MURL.'&n='.$i);
    		ob_end_flush();
    

    每读取50个文件的数据组成一个SQL语句提交一次执行然后再跳转当前页带参数以50递增
    每50个文件的量大约只花了3-4秒就导入进去了

    实际运行后又发现问题 当页面刷到$i为1050后 即20次后停止了 从1050再开始后到2100又停止了跳转
    这应该是浏览器的重定向限制问题 经查询果然如此

    浏览器版本 限制次数
    chrome 20
    opera 20
    safari 15
    firefox 20
    ie7 8 10
    ie9 110
    (我用的chrome)

    这里的想到的方案是每20次后新开一个窗口打开 然后关掉旧窗口(JS实现)
    由于该案例文件数还不是很多 手动3次就好了
    随后检查数据 存在的数据都没有问题 虽然此前已设置了字段都不允许为空 但每个文件的数据导入完会多出一条空白数据只有标题有值 其余为空值 后发现每个文件的最后都多了一行空行,而这个空行用count(file($filename))统计是不会算在里面的 但指针却会指向

    最后删除了等同文件数的空记录数

    大功告成 (:зゝ∠)

    PS:这次百万量级的数据导入还是碰到了各个层面上不少问题的 也获得了许多经验
    由于时间限制 处理用的程序没有进行进一步的优化 期间还试图尝试用C#或Java实现但也碰到一些问题 为免过杂 最终不了了之
    总览整个过程 日后考虑用CSV代替TXT存储数据 用Python来实现文件IO操作很快, 然后开多线程访问PHP或.Net页面进行数据库插入,同时还可以显示进度,当然Python操作数据库也是可以的。方法很多,视具体需求来用。

    总结经验:
    1.大量数据导入前要对原始数据做准确的规范化处理 源文件是TXT的要特别注意分隔符。可使用逗号分号及tab制表符不建议使用空格。

    2.按行读取时 文件中的空行会被指针指向读取出来 但统计行数时不会包含在内。若后续处理需要依据行数可考虑处理掉空行。用C#的话可以整个文件一次性读进DataTable且不会有空行问题。

    3.遍历文件夹内的文件会多出不属于文件的部分,要注意过滤。对于会重复访问遍历的数组要进行排序以保证顺序永远一致。

    4.递归函数的传入参数不要直接使用,先赋值给一个变量,在函数中使用那个变量。(这其实也是规范)

    5.长时间执行PHP或执行数据库操作要考虑内存,缓存及超时问题,进行合理的内存容量调整和超时配置,控制好缓存的释放(IIS中设置CGI的超时时间过长会引发电脑高度频繁卡顿,从任务管理器CPU和内存的消耗情况中看不出问题)。另外长时间的执行是否是正常现象也需要考虑,若不合理就要调整代码了。

    6.若插入的数据有可依据的字段 可先将这批字段值插入数据库作为索引。能加快执行速度。

    7.不同类数据库之间数据的传输善用工具 要考虑工具本身及数据库驱动程序的各类问题。

    8.若要使用浏览器多次跳转需要考虑重定向限制问题。处理方式不唯一,该问题也是完全可以回避的。

    展开全文
  • 亿万数据量级mongoDB中高效查找同一字段的所有不同值集合

       公司线上数据用的是mongodb存储(其实线下一般也用mongodb),最近负责一个项目,需要每天获得线上数据库中所有的卖家id和卖家店铺名称。其实简单的将整个数据库扫一遍,拿出需要的这两个字段,再过滤一遍就可以了,但总想试一试更高级点儿的方式,谁叫我懒呢,不想写太多代码,不想做太多维护,还想快速准确拿数据。

        mongodb集合中doc(一个doc表示一个商品信息)的数据格式如下图所示,我要做是获取所有的userId和nick字段,然后去掉重复的即可。
    这里写图片描述

    distinct指令

       distinct指令的详细解释及用法见官网。亿万级数据量的情况下,distinct指令看看就行了,不然等它执行的时间都够睡一觉了。

    mongoexport工具

       通过mongodb自带的集合导出工具mongoexport来实现。使用mongoexport导出集合中需要的字段到文件中,然后对文件进行排序和去重(先排序,后去重,因为uniq只会比较相邻的两行并去重)。

    momgoexport -c author_name -c collection_name --csv --fields field1 fileld2 -o exported_data.csv
    cat exported_data.csv | sort | uniq > unique.txt

    需要注意的是:导出的文件过大的话,同样会很耗时,甚至导致处理失败。这个时候就需要将导出的文件进行分割成多个小文件了。

    split -d -b 10G exported_data.csv   # 将exported_data.csv分割成10G大小的多个小文件,每个小文件的结尾以数字结尾

    切割好了文件后,再对每个小文件排序去重即可。

    MapReduce

       mongodb中可以使用MapReduce很方便的进行分组统计,整个查询统计过程不牵扯到过多的手工操作,代码量也少。

    import pymongo
    from bson.code import Code
    
    client = pymongo.MongoClient('199.155.122.32:27018')
    db = client['products']
    collection = db['products_20161107']
    
    # map函数的作用是遍历集合,调用emit函数将集合中userId、nick字段以键值对的形式传递给reduce函数
    mapper = Code("""
    function(){
        emit(this.userId, this.nick);
    }
    """)
    
    # reduce函数的作用对map函数传递过来的键值对进行处理, 每个<key, values>键值对中,key是userId字段的值,values是具有相同userId的nick的数组。由于我的程序中一个values的各个元素的值是相同的,所以没有对values进行遍历。
    reducer = Code("""
    function(key, values){
        var result = {nick: values[0]};
        return result;
    }
    """)
    
    # 启动MapReduce, 将结果输出到seller_info这个集合中
    result = collection.map_reduce(mapper, reducer, 'seller_info')
    
    # 遍历seller_info集合,查看MapReduce结果
    for doc in db['seller_info'].find():
        print doc

    我的程序的执行结果如下图所示:
    这里写图片描述
    从结果中我们可以看到,ruduce函数中key的值作为了_id字段的值,返回结果result作为了values字段的值。

    展开全文
  • 该文从Pandas的数据的读写、数据清洗、数据过滤、数据转换(映射、替换、字符串矢量级运算)、数据合并等都进行了详细的总结和案例说明,是pandas的核心重点知识。 目录 一、数据读写处理文档 1.1、pandas数据的...
  • 文章目录前言HDFS元数据快速膨胀带来的性能瓶颈问题超大规模数据迁移所面临的挑战和困难DistCp的全面优化提升 前言 前面时间笔者曾写过一篇关于利用HDFS fastcopy功能来加速DistCp数据拷贝效率的文章(Distcp结合...
  • 现在有一张表是由三张表合并而成的,三张表分别对应于不同类型的设备,合并完成之后发现其中某一种设备的一个数据量级和其他两张表的量级不同,需要进行量级的统一,请问如何在原列进行量级的修改
  • 排除依据比较的排序算法如快速排序、选择排序,应该选择线性排序算法。 2.再因为是千万级的数据,可以考虑使用桶排序,建立一个有711大小的桶(数组),遍历整个文档,根据分数大小在相应的桶号上计数。 3.根据...
  • 58同城发展之初,大规模使用关系型数据库(SQL Server、MySQL等),随着业务扩展速度增加,数据量和并发量演变的越来越有挑战,此阶段58的数据存储架构也需要相应的调整以更好的满足业务快速发展的需求。 MongoDB...
  • https://www.codeproject.com/Articles/34405/WPF-Data-Virtualization
  • 在一家发展中的公司搬砖,正好遇到分库分表,数据迁移的需求比较多,就入坑了。最近有个系统重构,一直做数据重构、迁移、校验等工作,基本能覆盖数据迁移的各个基本点,所以趁机整理一下。 数据同步的场景是:...
  • 50万的平台赔付数据。 处理的目的: 一是环比每周对应数据指标的变化情况,是否存在异常数据情况,确保业务属于正常平稳的运营状态。 二是在产品、业务需求的角度出发,分析相关数据指标见的关系,以及如何通过数据...
  • 大数据——数据量级单位汇总

    万次阅读 2014-03-12 20:33:14
    按从小到大的顺序依次为: B、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB
  • 一种产品P1,隶属于一种分类(a)或者多种分类(a,b,c) ...数据例如:"P1","a,b,c" 另外再增加一个产品分类和产品关联的数据表,例如:以上可以拆分为P1,a;p1,b;p1,c 三行数据 哪个更合适? 谢谢!
  • https://jingyan.baidu.com/article/fedf07375a6c5d35ac89772f.html 转载于:https://www.cnblogs.com/butterflybay/p/11262454.html
  • 工作原因需要处理一批约30G左右的CSV数据数据量级不需要hadoop的使用,同时由于办公的本本内存较低的缘故,需要解读取数据时内存不足的原因。 操作流程: 方法与方式:首先是读取数据,常见的csv格式读取时一次性...
  • 本文,基于某电商海量的全链路数据,简明扼要的分享自己工作三年的时间内在实时数据统计分析以及数据挖掘方面的经验。
  •   ES数据检索的流程如上所示,第一次检索一个数据时是从磁盘里读的,慢;以后读会从filesystem cache中拿,快。filesystem cache是操作系统级的缓存。   es严重依赖于filesystem cache,如果filesystem cache...
  • Elasticsearch 对于大数据量(上亿量级)的聚合如何实现? Elasticsearch 提供的首个近似聚合是 cardinality 度量。它提供一个字段的基数,即该字段的 distinct 或者unique 值的数目。它是基于 HLL 算法的。HLL 会先...
  • let vm = new miniVM({ el: '#app', data: { test: 'hello, light-mvvm', obj: { name: true } } })

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,708
精华内容 23,483
关键字:

不同量级数据比较