分工及贡献

组内有三人去考证了,只剩下6人

组员 分工 贡献比例
王永福 前后端,爬虫,博客主体 30%
孙承恺 建模,算法设计,统筹 18%
邱畅杰 爬虫 15%
徐祖豪 前端数据可视化 13%
张凌昕 前端数据可视化,部分博客 11%
丁枢桐 数据可视化,聚类算法 13%

GitHub提交日志

GitHub

程序运行截图

爬虫

服务器端

部分数据




程序运行环境

爬虫

  • Anaconda 3
  • Python 3.7
  • 涉及的包比较多,这里不一一列出,稍后我会将Anaconda环境导出到environment.yml并上传至GitHub,大家可以去看

服务器端

  • Python
  • Flask
  • Flask-CORS

前端页面

  • 建议Chrome 76或以上,其他没试过

前端构建

  • Node.js 10
  • Yarn包管理器
  • Vue-cli 3
  • 其他依赖包在package.json中有,可以yarn install直接安装
  • 另外需要可用的高德地图的Key

GUI界面



基础功能实现

数据爬取

根据题目要求,我们需要爬取相关数据,根据对题目的分析,以及对美团和大众点评、高德地图的前期调研,我们认为可以将前三个评测目标划为一组,数据一起爬取,因为它们需要的字段比较相似(可以见上面的数据截图);第四个目标我们在美团上找不到数据,大众点评难以爬取,因此转向高德POI搜索爬取。

美团的数据主要从手机版网页爬取(PC版网页没有经纬度且需要计算token),使用Chrome Developer Tools模拟手机访问网页抓取数据进行分析,发现Cookie只需要设置ci和uuid即可爬取,其他仿照抓取到的请求设置。

爬取时需要注意美团反爬技术非常硬,需要不断更换IP和ID,否则没一会就会白给,早上我们已经白给好多次了。我们的爬虫理论上具备获取所有数据的能力,但由于疯狂白给,最后只获取了少量数据用于制作demo。

另外高德API虽然不反爬,但是API有调用配额限制,爬多了也会白给。建议多准备几个Key

数据处理

获取到数据后,需要对数据进行预处理以进行展示,对于不同的评测目标,采取不同的方法

测评出福州最受欢迎的商圈

将美团爬取到的数据按销量降序排列,按商圈聚类,然后根据全局排名,分阶梯对每一个商铺赋权,再将商圈内的商铺权值求和,排序,得到最受欢迎的商圈。

分别测评出福州人均消费50以下,50-100、100-200、200以上最佳(性价比最高)的前五家美食餐厅(参考评价与价格)

这个比较简单,直接按人均消费所属阶层聚类,组内排序,第一关键字评分降序,第二关键字人均价格升序。

测评出福州最佳美食聚集地

两条路:

  1. 对每家商铺赋权并按经纬度聚类,生成聚类图,由于算法比较复杂且数据序列化困难,故Web端不采用此方法生成的数据,此方法生成的图可用clustering中的代码生成
  2. 将原始数据提取经纬度直接在地图上打热力图。此方法较为简单,Web前端采用此方法。理论上虽有失偏颇,但是由于我们爬取的原始数据按销量和评分降序,因此爬到的都是排名靠前的,说是最佳美食聚集地应该也没什么问题吧(逃

测评出福州服饰类综合评分最高的商圈

从高德地图爬取的数据参照第一个评测目标相似的方法处理

数据可视化

主要采用了Vue框架来管理视图路由,AntV进行可视化展示,展示效果可见截图。地图部分采用了高德地图JS SDK

服务器端

理论上不需要这部分,但是没用网络感觉很low,为了高级一点,也为了可扩展性,用Flask加了个服务端,动态提供数据

UI

跟数据可视化一起做了,页面上的东西基本都是有交互的,饼图有Tooltip,点击下面的图例可以取消显示某一类,做到部分展示。地图可以旋转,改变俯仰角,热力图是3D的

关于功能的其他想法

高级可视化

可以在可视化上做一些炫酷或者高级的交互,比如说:

  • 像SyncFusion的Essential JS 2 的可视化组件Chart的Drilldown的多级饼图
  • 热力图交互,如点击弹出推荐列表
  • 根据实时数据的动态视图,或类似延时摄影的视图变迁

数据分析

如果能爬到大量数据

  • 多平台交叉验证
  • 评论情感分析
  • 时间序列分析

脑洞

做一整个推荐平台,同时收集用户数据

遇到的困难及解决方法

王永福

困难

  1. 数据来源反爬机制过强
  2. 数据可视化不熟练,前端不熟练,Python不熟练
  3. 人少

解决方法

  1. 找代理池,找开源项目
  2. 捡起来学
  3. 一人顶俩

丁枢桐

困难

  1. 对网络爬虫相关的类库不熟悉,对于相关网站特别是反爬虫的网站难以获取有效信息
  2. 对用web前端进行数据可视化的方法不熟悉,只能当场找模板现学

解决方法

  1. 现场学习
  2. 现场学习

张凌昕

困难

在这次现场编程中我主要负责的是前端这一块,在写饼图的时候,我刚刚开始不是很懂G2,并且在挑选饼图形式的时候,比较不知道挑选哪个比较好

解决方法

多看一些模板,并且有的模板上会给一些注释,让我更了解G2的一些使用方法,用起来更容易。在饼状图格式的挑选上,先是选了一个不是太好看的,后来又选了一个比较合适的。

徐祖豪

困难

  1. 有几个组员要去考教资,现场编程只有六个人
  2. 前端技术太久没复习,不太熟悉

解决方法

  1. 好在提前知道有几个同学会缺席,所以事先分配了任务,进展还算顺利
  2. 现场学习

孙承恺

困难

短时间的分析和设计很令人烦躁,api接口没开放增加工作量

解决方法

化繁为简

邱畅杰

困难

数据难以爬取,token算法未知

解决方法

对于美团爬取手机版页面,采用代理池
对于大众点评,放弃

马后炮

  • 徐祖豪:如果自己能再早几天复习,准备充足一点,项目的进展会更顺利
  • 孙承恺:如果这门课不是必修,那么我一定不会选
  • 丁枢桐:如果之前我有系统地学习如何使用python进行网络爬虫,那么这次就会很快地为团队获取有效数据。而不会导致前面一直在为数据苦恼
  • 丁枢桐:如果之前我有系统地学习web前端的开发,那么这次就可以写出更棒的UI界面
  • 王永福:如果我没这么菜,这次可以完成得更好(如果这门课不是必修,那么我一定不会选)
  • 邱畅杰:如果黑夜给了我黑色的眼睛,那么我将用它来寻找光明

    PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 5 5
    Estimate 估计这个任务需要多少时间 5 5
    Development 开发 90 120
    Analysis 需求分析(包括学习新技术) 30 40
    Design Spec 生成设计文档 0 0
    Design Review 设计复审 0 0
    Coding Standard 代码规范(为开发制定合适的规范) 0 0
    Design 具体设计 30 50
    Coding 具体编码 30 30
    Code Review 代码复审 0 0
    Test 测试(自我测试,修改,提交修改) 0 0
    Reporting 报告 30 30
    Test Report 测试报告 0 0
    Size Measurement 计算工作量 0 0
    Postmortem & Process Improvement Plan 事后总结并提出过程改进计划 30 30
    合计 125 155

    学习进度条

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
1 407 407 15 15 学到了十三水的玩法,了解了原型设计工具的使用方法
2 230 637 14 29 制定了基本实现思想和前端窗体框架
3 1200 1837 20 49 实现基本交互逻辑
4 1045 2882 20 69 实现接口对接和后端处理
5 0 2882 5 74 对原型设计更加熟练以及学习了uml图的绘制
6 210 3092 8 8 重新复习了下爬虫

第12组 团队Git现场编程实战的更多相关文章

  1. 第11组 团队Git现场编程实战

    第11组 团队Git现场编程实战 组员职责分工: 前端部分: 陈郑铧:构架的搭建,前端模块开发 陈益:前端模块开发 李镇平:前端模块开发 后端部分: 沈国煜:后端模块开发 王泽鸿:后端模块开发 林铮威 ...

  2. 第09组 团队Git现场编程实战

    组长博客链接 1.团队分工 团队成员 分工明细 王耀鑫 博客撰写,数据处理 陈志荣 前端界面,前端功能实现 陈超颖 前端界面,前端功能实现 沈梓耀 前端界面,前端功能实现 林明镇 数据处理 滕佳 前端 ...

  3. 第07组 团队Git现场编程实战

    组员职责分工 团队成员 分工 杨明哲 爬数据,做网页 林兴源 合作编码完成了对美团数据的分析,分析出最有发展潜力的十佳好店 卞永亨 从大众点评分析出了服装商圈 林鑫 合作编码完成了对美团数据的分析,分 ...

  4. 第08组 团队Git现场编程实战

    一.组员职责分工 算法:庄锡荣,林鑫灿 UI:许煌标,蔡峰,林晓锋,陈珊珊,侯雅倩,吴珂雨 博客:陈珊珊,王钟贤 二.github提交日志 三.程序运行截图 运行中爬取到的部分信息 数据库中的部分信息 ...

  5. 第03组 团队git现场编程实战

    1.组员职责分工 张逸杰:复制监督整个编程任务的进程以及协助组员编程 黄智锋.刘汪洋:负责UI设计 苏凯婷.鲍冰如:爬取数据并负责测评出福州最受欢迎的商圈 陈荣杰.杨锦镔:爬取数据并负责测评出福州人均 ...

  6. 第03组团队Git现场编程实战

    1.组员职责分工 张逸杰:复制监督整个编程任务的进程以及协助组员编程 黄智锋.刘汪洋:负责UI设计 苏凯婷.鲍冰如:爬取数据并负责测评出福州最受欢迎的商圈 陈荣杰.杨锦镔:爬取数据并负责测评出福州人均 ...

  7. 第06组 团队Git现场编程实战

    一.组员职责分工 队员姓名 主要分工 朱庆章 测评福州最受欢迎的商圈(参考人气) 陈梦雪 测评福州最受欢迎的商圈(参考人气) 关文涛 分别测评福州人均消费50以下,50-100.100-200.200 ...

  8. 第02组 团队Git现场编程实战

    目录 1. 组员职责分工(2分) 2. github 的提交日志截图(1分) 3. 程序运行截图(3分) 4. 程序运行环境(1分) 5. GUI界面(5分) 6. 基础功能实现(10分) 7. 鼓励 ...

  9. 第01组 团队Git现场编程实战

    目录 一.组员职责分工 二.github 的提交日志截图(鼓励小粒度提交) 三.程序运行截图 四.程序运行环境 五.GUI界面 六.基础功能实现 七.鼓励有想法且有用的功能 八.遇到的困难及解决方法 ...

随机推荐

  1. java容易混淆的概念

    容易混淆的内容 1.JVM内存模型 2.Java内存模型 3.Java对象模型 JVM内存模型 1.堆 2.虚拟机栈 3.本地方法栈 4.程序计数器 5.方法区 Java内存模型 Java堆和方法区的 ...

  2. JavaScript之变量

    var a; // 声明变量a,变量:值可以改变的,相当于数学x,y,z... a=10; // 将10赋值给a var test; var Test; /* 变量命名规则: 1.不能以数字开头 2. ...

  3. UCOSIII钩子函数

    OSIdleTaskHook 空闲任务调用这个函数,可以用来让CPU进入低功耗模式 void OSIdleTaskHook (void) { #if OS_CFG_APP_HOOKS_EN > ...

  4. iOS 关键词assign、strong、copy、weak、unsafe_unretained

    关键词assign.strong.copy.weak.unsafe_unretained 影响: 是否开辟新的内存 是否有引用计数增加 strong 指向并拥有该对象.其修饰的对象引用计数会 +1,该 ...

  5. 【转】简易剖析Hadoop作业工作机制

    原文地址:https://www.cnblogs.com/duma/p/10666269.html 建议:结合第四版Hadoop权威指南阅读,更有利于理解 运行机制 运行一个 MR 程序主要涉及以下 ...

  6. Flask之threading.loacl方法

    一.threading.loacl方法 import threading import time class Foo: pass foo = Foo() def func(num): foo.num ...

  7. git修改提交历史中的author信息

    当次提交 当次的提交显示指定提交者信息: git commit -m "Initial commit" --author="mn <mn@furzoom.com&g ...

  8. PAT_A1059

    这是一道素数因子分解的问题: 1.先打印素数表出来,以便后期使用,素数表的大小就是10^5级别就可以,因为输入的数是long int(即就是int而已),大小最大21亿(10^10量级的),我们这里素 ...

  9. 【转】 Anatomy of Channels in Go - Concurrency in Go

    原文:https://medium.com/rungo/anatomy-of-channels-in-go-concurrency-in-go-1ec336086adb --------------- ...

  10. 你的一举一动,我可都看着!Linux超骚技巧三分钟Get

    今天看到一个超级叼的linux命令,可以完整记录屏幕上的命令与输出结果. 有人问这有什么叼的,不就是保存历史操作记录吗?我看看日志也能看出来. 不不不,我要说的“完整记录”包括第几秒执行什么命令,就像 ...