python 根据网优指标和工参,自动生成百度热力图

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('gbk')
html="""
  根据提取指标的csv,
  先随便找一个基站csv来做实验,还是直接一步到位。
  看一下胡工发的春节指标文件。注意春节数据与日常数据可能不同。
  这一次暂时忽略: 对日期、各县、小区的处理
  查找基站数据库,确定它的经纬度,基站名称,
 
  因为同一个基站的所有小区共用一个经纬度,
  所以目前考虑用基站统计代替小区统计,仅仅是为了便于制作热力图,
  至于其他的图表,另作考虑。
  提供经纬度和指标值
  根据基站名称,找到工参表中对应的经纬度,
  方法是: 打开两张表,一个指标表,一个工参表, 然后查询合并一个新表,仅包含经纬度和话务量和基站名称
  联合两张表的方法,我在原来的文件中已经实现,打开一张表,然后依次提出两个数据,基站名称和话务量,
然后打开工参表,从中找到 基站名称,经纬度,
首先找出老文件。
也就是生成多张图片的文件。14:41
对文件进行精简和修改,提取有用的命令。14:44
   
  自动制作热力图


"""


html="""
  对于第一个文件是获取两列
  从第二个文件中,获得基站名称和话务量,放入变量1和变量2,
  使用下面的循环查询命令来获取每一行数据,再从中找到变量1和变量2
for indexs in df3.index:



 
  然后在第一个工参中查找变量3基站编号,变量4和5, 和经纬度,
  然后把这5个变量写入一个新文件中,

"""


import pandas as pd
import string

txtName = "zk111.htm" #
f=open(txtName, "a+")#
html="""
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=GuVuTMGm7drDEpUCcZe22qGhdH8B0kIt"></script>
    <script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js"></script>
    <title>热力图功能示例</title>
    <style type="text/css">
        ul,li{list-style: none;margin:0;padding:0;float:left;}
        html{height:100%}
        body{height:100%;margin:0px;padding:0px;font-family:"微软雅黑";}
        #container{height:650px;width:100%;}
        #r-result{width:100%;}
    </style>    
</head>
<body>
    <div id="container"></div>
    <div id="r-result">
        <input type="button"  οnclick="openHeatmap();" value="显示热力图"/><input type="button"  οnclick="closeHeatmap();" value="关闭热力图"/>
    </div>
</body>
</html>
<script type="text/javascript">
    var map = new BMap.Map("container");          // 创建地图实例

    var point = new BMap.Point(114.6285375, 32.92869355);
    map.centerAndZoom(point, 15);             // 初始化地图,设置中心点坐标和地图级别
    map.enableScrollWheelZoom(); // 允许滚轮缩放
 
    var points =[
"""
f.write(html)
df=pd.DataFrame(pd.read_csv('wcdma.csv',header=0)) #工参


df3=pd.DataFrame(pd.read_csv('3g1.csv',header=0))  #要查询的指标文件


print df3['NodeB名称'],df3['电路域话务量(Erl)']  #这样显示的是单独的两项,所有的值


#怎样显示这两项的某个值

for indexs in df3.index:
   #print(df3['NodeB名称'].iloc[indexs])
   s1=df3['NodeB名称'].iloc[indexs]   #提取'NodeB名称'   某一行的值
   s20=df3['电路域话务量(Erl)'].iloc[indexs]
   s2='%f' %df3['电路域话务量(Erl)'].iloc[indexs]  #提取'电路域话务量(Erl)'   某一行的值
   print s1,s2  
   df2=df.loc[df['CellName'].isin([s1+"_0"]),['CellName','NodeBNAME','NodeBLON','NodeBLAT']]  #根据指标表中的'NodeB名称' 的 某一行的值,在工参表中查找
   for i in range(len(df2)):
      print i
      s3=df2['CellName'].iloc[i]
      s4=df2['NodeBNAME'].iloc[i]
      s5='%f' %df2['NodeBLON'].iloc[i]
      s6='%f' %df2['NodeBLAT'].iloc[i]
   #print s3,s4,s5,s6
   s7='{"lat":'+s6+',"lng":'+s5+',"count":'+'%f' %(s20+0)+'},'  #{"lat":32.92869355,"lng":114.6285375,"count":85},  +0, 如果是负值,RSRP 那么改为+200
   #jj=s6+','+s5+','+s2+','+s1+','+s3+','+s4+','+s7+chr(10)  #包含很多内容
   jj=s7  #仅包含josn
   print type(s5)
   #print df2  #现在已经初步实现了目标,下一步就是把这几项写入
   #删除df2的重复项#但是DF2在每次循环之后都会被重复覆盖,#将结果存入字符串,只需要再嵌套一个循环,#循环嵌套,在循环中嵌套另一个循环
   #现在已经准备好了s1到S6, 把字符串用逗号串起来,用chr(10) 结尾。 然后写入文件,试试。a+
   f.write(jj)   #抽取一行,进行核对,对应数据准确无误

html0="""
]
    if(!isSupportCanvas()){
        alert('热力图目前只支持有canvas支持的浏览器,您所使用的浏览器不能使用热力图功能~')
    }
    //详细的参数,可以查看heatmap.js的文档 https://github.com/pa7/heatmap.js/blob/master/README.md
    //参数说明如下:
    /* visible 热力图是否显示,默认为true
     * opacity 热力的透明度,1-100
     * radius 势力图的每个点的半径大小   
     * gradient  {JSON} 热力图的渐变区间 . gradient如下所示
     *    {
            .2:'rgb(0, 255, 255)',
            .5:'rgb(0, 110, 255)',
            .8:'rgb(100, 0, 255)'
        }
        其中 key 表示插值的位置, 0~1.
            value 为颜色值.
     */
    heatmapOverlay = new BMapLib.HeatmapOverlay({"radius":20});
    map.addOverlay(heatmapOverlay);
    heatmapOverlay.setDataSet({data:points,max:110});
    //是否显示热力图
    function openHeatmap(){
        heatmapOverlay.show();
    }
    function closeHeatmap(){
        heatmapOverlay.hide();
    }
    closeHeatmap();
    function setGradient(){
         /*格式如下所示:
        {
              0:'rgb(102, 255, 0)',
              .5:'rgb(255, 170, 0)',
              1:'rgb(255, 0, 0)'
        }*/
         var gradient = {};
         var colors = document.querySelectorAll("input[type='color']");
         colors = [].slice.call(colors,0);
         colors.forEach(function(ele){
            gradient[ele.getAttribute("data-key")] = ele.value;
         });
        heatmapOverlay.setOptions({"gradient":gradient});
    }
    //判断浏览区是否支持canvas
    function isSupportCanvas(){
        var elem = document.createElement('canvas');
        return !!(elem.getContext && elem.getContext('2d'));
    }
</script>
"""
html1=s7[:-1]+html0


f.write(html1)  
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值