def getCategoryDistributionInRegions(dcPaths, dfCellLocType): ''' This function computes: 1. total user number in different types of locations; 2. category user number in different types of locations; 3. category traffic in different types of locations; param: dcPaths - roaming paths dfCellLocType - index=lac-cid return: srUserNumPerRegion - total user number per region, index:region dfCategoryUserNumPerRegion - category user number per region, row:category, col:region dfCategoryTrafficPerRegion - category traffic per region, row:category, col:region ''' dcTotalUserNumPerRegion = {} # total user number in different types of locations; dcCategoryUserNumPerRegion = {} # category user number in different types of locations; dcCategoryTrafficPerRegion = {} # category traffic in different types of locations; for path in dcPaths.values(): for node in path.m_lsNodes: strKey = "%d-%d" % (node.m_nLac, node.m_nCellID) nRegionType = dfCellLocType.loc[strKey]["typeID"] strRegionName = region_type.g_dcRegionTypeName[nRegionType] # total user updateDictBySum(dcTotalUserNumPerRegion, strRegionName, 1) dcCategoryUserNumForCurrentRegion = dcCategoryUserNumPerRegion.get(strRegionName, None) if (dcCategoryUserNumForCurrentRegion is None): dcCategoryUserNumForCurrentRegion = {} dcCategoryUserNumPerRegion[strRegionName] = dcCategoryUserNumForCurrentRegion dcCategoryTrafficForCurrentRegion = dcCategoryTrafficPerRegion.get(strRegionName, None) if (dcCategoryTrafficForCurrentRegion is None): dcCategoryTrafficForCurrentRegion = {} dcCategoryTrafficPerRegion[strRegionName] = dcCategoryTrafficForCurrentRegion dcCategoryUserNumForCurretNode = {} for app in node.m_lsApps: strCategoryName = app_category.getAppCategory(app.m_nServiceType) dcCategoryUserNumForCurretNode[strCategoryName] = 1 updateDictBySum(dcCategoryTrafficForCurrentRegion, strCategoryName, app.m_nDownBytes) for (k,v) in dcCategoryUserNumForCurretNode.iteritems(): updateDictBySum(dcCategoryUserNumForCurrentRegion, k, v) srUserNumPerRegion = pd.Series(dcTotalUserNumPerRegion) dfCategoryUserNumPerRegion = pd.DataFrame(dcCategoryUserNumPerRegion) dfCategoryTrafficPerRegion = pd.DataFrame(dcCategoryTrafficPerRegion) # delete unknown region type & app cateogry srUserNumPerRegion.drop(labels=region_type.g_dcRegionTypeName[region_type.ID_TYPE_UNKNOWN], inplace=True) dfCategoryUserNumPerRegion.drop(labels=app_category.g_strUnknown, inplace=True) del dfCategoryUserNumPerRegion[region_type.g_dcRegionTypeName[region_type.ID_TYPE_UNKNOWN]] dfCategoryTrafficPerRegion.drop(labels=app_category.g_strUnknown, inplace=True) del dfCategoryTrafficPerRegion[region_type.g_dcRegionTypeName[region_type.ID_TYPE_UNKNOWN]] return srUserNumPerRegion, dfCategoryUserNumPerRegion, dfCategoryTrafficPerRegion