Python处理对于新时代网络优化工作的意义
在做事之前,首先要解决的就是做这件事是否是必要的,我做这件事不是说应景去迎合IT转型的口号,而是我真的感觉到了这个的重要性。随着网络的发展,我们的优化分析也变得越来越精准和精细,从面向网络的优化向面向用户、面向感知去优化。在进行用户级感知分析的时候,涉及到的数据量实在是太大了,四线城市一天的数据量就要达到150w条的量级,更别说是省会城市或者更高层次的分析。目前EXCEL的数据处理极限是104w多一点,根本完成不了如此大的分析工作。
而python众所周知以其大数据处理能力强而被作为数据处理的主要手段,本人作为0基础计算机小白,抛砖引玉,浅谈我是如何使用Python处理方便优化分析工作的。
Python的简单介绍
python是一种基于面向对象的语音,有很多的开发好的工具可以让我们使用,本次分析处理数据使用的是Pandas 和NumPy 。Pandas为数据处理提供了大量的数据模型,包括我们最常用的数据透视表,而Numpy主要提供数学处理模型。
正式的工作
进入正题,本次想针对一段时间内用户业务情况梳理出每个小区使用最多的业务,也就是给小区进行业务画像,后续方便根据小区下不同的主体业务特性进行针对性精准业务优化,关于已确定的小区不同主体业务特性如何针对性的进行精准优化,后续文章进行更新,本次着重介绍如何进行数据处理。
步骤一:数据的打开
既然要进行数据的处理首先要进行数据打开,由于数据较多,我们获得的数据格式通常CSV或者TXT,前文已经介绍,我们是使用Pandas 和NumPy 两个模块,需要提前进行加载(关于软件的安装和IDE中模块的加载,如果有需要后续进行文章更新)
import pandas as pd
import numpy as np
加载完Pandas 和NumPy 两个模块之后进行文件打开
user_sheet = pd.read_csv('文件名.csv')
user_txt = pd.read_table('文件名.txt')
# user_sheet/ user_txt为输入的数据
需要注意的是,打开文件可以按照路径去打开,如果该文件存放在工程目录下,直接加英文引号引入文件名即可。另外,当原有的CSV或者TXT并不是以EXCEL表格那样按列分开的,而是以;或者|等方式连接的在一列的,需要如下读取
user_sheet = pd.read_csv('文件名.csv',sep=";",encoding="JBK")
user_txt = pd.DataFrame(pd.read_table("文件名.txt",sep=";",encoding="UTF-8"))
步骤二:数据的透视
在这个过程中需要使用pivot这个函数,函数定义如下
pivot_table(self,values=None, index=None, columns=None, aggfunc='mean', fill_value=None,margins=False, dropna=True, margins_name='All')
# self : 要处理的表
# values : 合并的列,需要聚合的列
# index : 要聚合的列
# columns : 用与分组的列名,可以理解为列索引名
# aggfunc : 聚合函数
# fill_value: 缺失值填充
# dropna : boolean, default = True, 当前列都为NaN时,整列丢弃。
#margins: boolean, default= False , 当margins=True, 增加列/行总计
# margins_name string ,default = 'All', 设定margin列名
参数看起来很多,其实常用的self,就是我们要处理的表,index就是我们要按照哪一列进行数据透视,我们既然要看小区下业务的类别,那么我们就要对小区名字和业务类进行透视,aggfunc就是我们数据透视表中显示值的规范包括平均值、计数、求和、均值等,由于我们要知道小区下每种业务的比例,那么我们就要知道每一种业务的数量,因此这里用len,出现业务的长度,也就是次数。
piviot_sheet = pd.pivot_table(user_sheet, index=['CELLNAME', 'CATEGORY_BIG'], aggfunc=len)
# piviot_sheet数据透视表
步骤三:统计小区业务的总数
sum_type_sheet = pd.pivot_table(piviot_sheet,index=['CELLNAME'], aggfunc=np.sum)
# 统计小区业务总数
步骤四:统计小区业务的比例
该过程中用到merge将业务总数追加到原来表格的后面,由于我们把业务总数放在了sum_type_sheet所以通过merge函数按照小区名取并集即可。
merge的参数
on:列名,join用来对齐的那一列的名字,用到这个参数的时候一定要保证左表和右表用来对齐的那一列都有相同的列名。
left_on:左表对齐的列,可以是列名,也可以是和dataframe同样长度的arrays。
right_on:右表对齐的列,可以是列名,也可以是和dataframe同样长度的arrays。
left_index/ right_index: 如果是True的haunted以index作为对齐的key
how:数据融合的方法。
piviot_sum_sheet_merge = pd.merge(piviot_sheet,sum_type_sheet, how="outer", on="CELLNAME")
# 将小区业务总数追加在原透视表中
piviot_sum_sheet_merge["ratio"] = piviot_sum_sheet_merge["USERNUMBER_x"] / piviot_sum_sheet_merge["USERNUMBER_y"]
# 追加比率在最后一列)
最终获得小区下每种业务的比例。
python培训:http://www.baizhiedu.com/python2019