我用Python做设计(一)


目录

  • 我用Python做设计一

    • 目录
    • 前言
    • 简介
    • 数据处理
    • 算法分析

前言

  “铃铃铃,铃铃铃。。。”随着一阵急促的电话,我知道又要有的忙了。“XX,有一份规划,着急要,要求和资料我已经发你了,你抓紧看一下,有什么问题给我打电话。”
  晕,难得的清闲时间,又没了,开始接收文件,看看是啥。原来是一份本地区的配网自动化规划设计要求。

简介

  看了下要求,原来对本地的配网自动化光纤建设进行规划,做到本地区配网自动化节点和配变节点的光纤100%覆盖。要求知道了,下面就是看看,都有哪些资料。

  • 本地的当前配电房的GIS的CAD版本
  • 本地的当前所有配变的Excel版资料

      先对本地区的配网自动化组网方案进行一个简要的介绍,本地区的配网光线自动化组网方案,采用以太网交换机的光纤环网的组网方案,环网从变电站出发,串接各个自动化节点,最后再回到变电站。然后原则上,一个变电站可以出不超过4个光纤环,一个环,原则上串接不超过25个节点。
      要求有了,先熟悉一下资料,看看有啥可用的。
      首先先从CAD中导出所有的变电站资料,看看有多少座变电站,他们都在哪儿。

序号 变电站 坐标X 坐标Y 坐标Z
1 叶孤城变电站 114.0911 22.5536 0
2 惊云变电站 114.1025 22.5758 0
3 连城变电站 114.1035 22.5716 0
14 香山变电站 114.1692 22.66 0

  然后是本地的所有配电房的数据,这个数据就比较多了,然后格式也是一样的,就不列举了。
  下面开始尝试先对数据有个简单的感受。

数据处理

  变电站的数据很少,就先看它。下面,当然是掏出我的大蟒蛇,嘻嘻嘻嘻,将数据处理之后,放进去,代码很简单。

import geoplotlib
from geoplotlib.utils import read_csv, BoundingBoxdata = read_csv('data/lh_stations.csv')
geoplotlib.dot(data, point_size=8)
geoplotlib.set_bbox(BoundingBox(22.58, 114.11, 22.53, 114.16))
geoplotlib.show()

  得到的效果如下:
  
  额。。。,好吧,开导自己,我至少知道了这几个变电站在哪儿,看着这些站的位置还是很不平均的,有些地方空出了很大位置,不晓得会不会影响规划。
  先不管了,再看看本地区的配电房都在那里吧。配电房数据,肯定不能这么看了,毕竟它要密的多,所以决定用热力图看看,代码也很简单。

import geoplotlib
from geoplotlib.utils import read_csv, BoundingBox
import comdef hist():data = read_csv('data/lh_powerhouses.csv')geoplotlib.hist(data, colorscale='sqrt', binsize=16)geoplotlib.set_bbox(com.boundingBoxDefault)geoplotlib.show()hist()

  得到的效果如下:
  
  
  图中,分成若干个矩形区域,然后统计每个矩形区域中的配电房的个数,配电房密度越高,颜色越亮,配电房密度越低,颜色越暗。从中可以看到配电房的分布也是很不均匀的。
  粗略的计算了一下,按照业主的要求,1个变电站可以接25*4=100个节点,那14座变电站就可以接1400个节点,对当前的规划来说,是够用的,那下面开始考虑,该怎么能实现业主的要求能。

算法分析

  首先想到的就是K-means算法,因为这跟聚类思想很像,假设我如果每个变电站出4个环,然后每个环接不超过25个点的话,通过不断尝试每个分组的最小类,来计算所有的分组。因为,如果要考虑每个环接不超过25个点这个条件的话,算法的复杂度会增大,所以,这里先直接调用经典K-means算法。
   

K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。

  代码比上面的稍长一些。

from geoplotlib.colors import create_set_cmap
import pyglet
from sklearn.cluster import KMeans
import geoplotlib
from geoplotlib.layers import BaseLayer
from geoplotlib.core import BatchPainter
from geoplotlib.utils import BoundingBox
import numpy as np
import comclass KMeansLayer(BaseLayer):def __init__(self, data):self.data = dataself.k = 56def invalidate(self, proj):self.painter = BatchPainter()x, y = proj.lonlat_to_screen(self.data['lon'], self.data['lat'])k_means = KMeans(n_clusters=self.k)k_means.fit(np.vstack([x,y]).T)labels = k_means.labels_self.cmap = create_set_cmap(set(labels), 'hsv')for l in set(labels):self.painter.set_color(self.cmap[l])self.painter.convexhull(x[labels == l], y[labels == l])self.painter.points(x[labels == l], y[labels == l], 2)def draw(self, proj, mouse_x, mouse_y, ui_manager):ui_manager.info('Use left and right to increase/decrease the number of clusters. k = %d' % self.k)self.painter.batch_draw()def on_key_release(self, key, modifiers):if key == pyglet.window.key.LEFT:self.k = max(2,self.k - 1)return Trueelif key == pyglet.window.key.RIGHT:self.k = self.k + 1return Truereturn Falsedata = geoplotlib.utils.read_csv('data/lh_powerhouses.csv')
geoplotlib.add_layer(KMeansLayer(data))
geoplotlib.set_smoothing(True)
geoplotlib.set_bbox(com.boundingBoxDefault)
geoplotlib.show()

  得到的效果如下:
  
  我细数了一下,最多的一个环里面有30+个,所以直接用肯定是不行的。不过暂时看着还像那么回事儿的,把得到的数据,先稍微处理一下,就先这样向老板交差吧,后面再细细考虑算法的问题。( ̄▽ ̄)”
 

我用Python做设计(一)相关推荐

  1. 自学python什么时候能够兼职-我,做设计两年,工资4000,兼职1.5w...

    "什么?!设计还要学这玩意 ?" 上周,约一朋友出去吃饭,没想到她居然在学Python. 然而,这还不是最令我感到惊讶的-- 我这朋友是做建筑设计的,一毕业就进了设计院,闲的时候每 ...

  2. python 科学计算设计_用Python做科学计算 高清晰PDF

    用Python做科学计算一书介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序 ...

  3. python开发cs程序_CSE209代做、代写Computer Graphics、代做CS/python编程设计代写Python程序|代做Processing...

    CSE209代做.代写Computer Graphics.代做CS/python编程设计代写Python程序|代做ProcessingCSE209 Computer Graphics~1~CSE209 ...

  4. python程序设计作业_CS602留学生作业代做、代写Programming课程作业、代做Python语言作业、Python编程设计作业调试...

    CS602留学生作业代做.代写Programming课程作业.代做Python语言作业.Python编程设计作业调试 日期:2019-12-06 10:50 CS602 - Data-Driven D ...

  5. 代写python期末作业价格_代写program留学生作业、代做Python程序语言作业、代写Python课程设计作业...

    代写program留学生作业.代做Python程序语言作业.代写Python课程设计作业 日期:2019-11-29 12:55 Completing the Final Project - Pyth ...

  6. python255多少钱_CS255留学生作业代做、代写Python语言作业、Timetabling作业代做、Python编程设计作业调试...

    CS255留学生作业代做.代写Python语言作业.Timetabling作业代做.Python编程设计作业调试 日期:2019-11-11 11:08 CS255 Artificial Intell ...

  7. 用python写搜索引擎_用python做一个搜索引擎(Pylucene)的实例代码

    1.什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信 ...

  8. len(x) 击败 x.len(),从内置函数看 Python 的设计思想

    内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得.Python 被公认是一种新手友好型的语言,这种说法能够成立,内置函数在其中 ...

  9. python的设计哲学_Python 的设计哲学

    The Zen of Python, by Tim Peters Python 的设计哲学,作者:Tim Peters Beautiful is better than ugly. 优雅胜于丑陋. E ...

最新文章

  1. java 获取mp4 缩略图_java获取视频缩略图
  2. c++ 动态分配数组_C/C++编程笔记:「C语言指针」民间解读版本
  3. 向oracle表空间添加一个数据文件命令
  4. 判断一个字符串大写小写,和数字出现的次数
  5. 山东大学linux实验报告,山东大学操作系统实验四
  6. [erlang] mnesia
  7. Inno Setup 插件 CallbackCtrl V1.1 (回调函数插件)
  8. 【免费下载】2021年4月热门报告盘点下载
  9. 二维数组按指定的键值排序
  10. SNS网站获取导入MSN联系人的方法
  11. 上传文件_Spring Boot文件上传
  12. IB选课指南及热门专业选课建议
  13. git commit 参数详解 --amend
  14. 文件加密的c语言程序课程设计,C语言文件加密课程设计.pdf
  15. canvas 画图 android,Android 中的Canvas画图
  16. 评论抓取:Python爬取AppStore上的评论内容及星级,突破500条限制
  17. 我所知道查找算法之斐波拉契(黄金分割法)查找
  18. 如何写好软件项目的工作计划(一)
  19. maven集成docker插件进行打包镜像并推送私服
  20. SQuirrel  一直连接不上问题

热门文章

  1. java毕业设计潮购购物网站Mybatis+系统+数据库+调试部署
  2. 古月居 机器人开发实践源码 编译报错问题解决方法
  3. 无字天书之Python第四页(变量基础)
  4. vue怎么放网页图标
  5. KVM(虚拟化平台)概念及部署
  6. 理解SetCapture、ReleaseCapture、GetCapture
  7. 字库表、编码字符集、字符编码
  8. Linux CPU affinity
  9. 记我经历的一次公司破产经历,一行代码害死一家公司
  10. java开源社交新零售_企业为什么要向社交新零售转型?