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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/unikran2018/article/details/79395085
# -*- 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)  
展开阅读全文

echarts 热力图问题

09-29

这是案例rnhttp://echarts.baidu.com/demo.html#heatmap-cartesian rnrn我的代码(打开上边的路径,贴到左侧看效果)rn[code=javascript]rnapp.title = '笛卡尔坐标系上的热力图';rnrnvar hours = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];rnvar days = ['', '', '',rn '', '', '', '', '', '', '', '', ''];rnrnvar data = [[0,0,10],[0,1,10],[0,2,10],[0,3,10],[0,4,10],[0,5,10],rn[1,0,10],[1,1,10],[1,2,10],[1,3,10],[1,4,10],[1,5,10],rn[2,0,10],[2,1,10],[2,2,10],[2,3,10],[2,4,10],[2,5,10],rn[3,0,10],[3,1,10],[3,2,10],[3,3,10],[3,4,10],[3,5,10],rn[4,0,10],[4,1,10],[4,2,10],[4,3,10],[4,4,10],[4,5,10],rn[5,0,10],[5,1,10],[5,2,10],[5,3,10],[5,4,10],[5,5,10],rn[6,0,10],[6,1,10],[6,2,10],[6,3,10],[6,4,10],[6,5,10],rn[7,0,10],[7,1,10],[7,2,10],[7,3,10],[7,4,10],[7,5,10],rn[8,0,10],[8,1,10],[8,2,10],[8,3,10],[8,4,10],[8,5,10],rn[9,0,10],[9,1,10],[9,2,10],[9,3,10],[9,4,10],[9,5,10],rn[10,0,10],[10,1,10],[10,2,10],[10,3,10]rn];rnrndata = data.map(function (item) rn return [item[1], item[0], item[2] || '-'];rn);rnrnoption = rn title: rn text: '上转人次',rn left: '50',rn bottom: '400',rn ,rn grid: rn height: '100',rn width:'50',rn //borderWidth: 10,rn //show: true,rn //shadowOffsetY: 2,rn y: '10%'rn ,rn xAxis: rn type: 'category',rn data: hours,rn splitArea: rn show: falsern ,rn axisTick: //坐标轴刻度相关设置rn show: falsern ,rn axisLine://坐标轴线rn show: falsern ,rn splitLine: rn show: false,rn interval: '70',rn rn rn ,rn yAxis: rn type: 'category',rn data: days,rn splitArea: rn show: falsern ,rn axisTick: rn show: falsern ,rn axisLine://坐标轴线rn show: falsern rn ,rn visualMap: rn color:['#4cbaef','#fba737'],rn itemWidth: 20,rn itemHeight: 150,rn min: 0,rn max: 10,rn calculable: true,rn orient: 'horizontal',rn left: 'center',rn bottom: '15%'rn ,rn series: [rn name: 'Punch Card',rn type: 'heatmap',rn data: data,rn label: rn normal: rn show: falsern rn ,rn itemStyle: rn emphasis: rn shadowBlur: 10,rn shadowColor: 'rgba(0, 0, 0, 0.5)'rn rn rn ]rn;rnrn[/code]rnrn要实现的效果rn[img=https://img-bbs.csdn.net/upload/201609/29/1475116242_566764.png][/img]rnrn应该还有属性设置,类似轴距大小之类的,望指教 论坛

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