├── DJISpying.jpeg
├── Fly Record.zip
├── README.md
├── Services
├── dji-service
│ ├── utm.wiki
│ │ └── utm-project.md
│ └── utm
│ │ └── README.md
├── djigo
│ └── dji-mobile-logging
│ │ └── doc
│ │ └── source
│ │ └── index.html.md
└── ds
│ ├── documents
│ ├── FlightHub.pdf
│ ├── FlightHub合作分工.docx
│ ├── 大疆创新安全技术白皮书_初稿框架.docx
│ ├── 大疆国内实名制项目v0.1.docx
│ ├── 方案设计图.png
│ ├── 无人机管控与侦测平台建设需求(初版).doc
│ ├── 无人机管控与侦测平台技术方案(1.5).doc
│ ├── 无人机身份认证方案v0.4.docx
│ ├── 无人机身份认证方案v0.5.docx
│ ├── 无人驾驶航空器安全管理数据库计划书.docx
│ ├── 监管平台2017年Q1改造升级计划.txt
│ ├── 监管平台系统设计报告.docx
│ └── 监管项目域名与服务器.xlsx
│ └── flying_mgr_portal
│ └── src
│ └── main
│ └── java
│ └── controller
│ └── SearchFlyingRecordController.java
├── extract_json.py
├── flight_data.db.zip
├── pics
├── YOU.png
├── breakuserbox.png
├── breakuserbox_cn.png
├── consumers.png
├── consumers_cn.png
├── dailyflightstats.png
├── datacollection.png
├── earlydays.png
├── earlydays_cn.png
├── heatmap.png
├── logsearch.png
├── machinelearning.png
├── machinelearning_cn.png
├── ministry_of_information_security.png
├── ministry_of_information_security_cn.png
└── userportrait.png
├── 大数据产业发展规划(2016-2020年).doc
├── 大数据产业发展规划(2016-2020年).pdf
├── 数据平台 - Data Platform
├── admin.wiki
│ ├── data-platform.md
│ ├── home.md
│ └── requirement.md
├── 【数据平台】2016总结与规划.pptx
├── 【数据平台】eDM自助取数项目计划书.xlsx
├── 【数据平台】取数引擎项目计划书.xlsx
├── 【数据平台】安全设计报告(2016.10).docx
├── 【数据平台】平台迁移项目计划书.xlsx
├── 【数据平台】应用安全开发规范反馈(2016.12.23).xlsx
├── 【数据平台】数据门户项目计划书.xlsx
├── 【数据平台】机器学习项目计划书.xlsx
├── 【数据平台】第三方电商平台数据整合项目计划书.xlsx
├── 【数据平台】菜单分布图(2017.03).xlsx
└── 用户画像单项指标分类
│ ├── activation_count.xlsx
│ ├── dopms_buy_product_count.xlsx
│ ├── dopms_order_count.xlsx
│ ├── takeoff_stat.takeoff_city_count.xlsx
│ ├── takeoff_stat.takeoff_count.xlsx
│ └── takeoff_stat.takeoff_country_count.xlsx
└── 舆情分析_规划讨论稿 - Public Opinion Analysis
├── 20160918-数据中心体系进度计划-201608版本.xlsx
├── dmp 相关数据源及报表服务.xmind
├── 会员营销规划v0.5_20160612.pptx
├── 全球代理IP库[测试部分].xlsx
├── 大疆舆情体系v0.5.xmind
├── 舆情.xmind
├── 舆情分析_规划讨论稿v1.0.pptx
├── 舆情分析_项目计划v1.0.xlsx
└── 舆情项目计划v1.0.xlsx
/DJISpying.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/DJISpying.jpeg
--------------------------------------------------------------------------------
/Fly Record.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Fly Record.zip
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Sentiment & Data Mining by DJI
2 |
3 |
4 |
5 | Data gleaned from open AWS shares circa October 2017
6 | Update: full dump avaialble here - https://archive.org/details/DJI_1506456264_2017_09_26_9.3.5_gitlab_backup
7 |
8 | DJI Sentinel & Supervisor 用户画像 (User Portrait) 数据平台 (Data Platform) detail
9 |
10 | 舆情分析_规划讨论稿 (Public Opinion Analysis)
11 | 个人信息交叉匹配 (Personal information cross matching)
12 |
13 | xmind files can be read with Xmind - https://www.xmind.net/download/
14 |
15 | "用户画像单项指标分类" (User Portrait Individual Index Classification) as described by Tencent
16 | https://cloud.tencent.com/developer/article/1134423
17 | https://translate.google.com/translate?hl=en&sl=zh-CN&u=https://cloud.tencent.com/developer/article/1134423&prev=search&pto=aue
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/Services/dji-service/utm.wiki/utm-project.md:
--------------------------------------------------------------------------------
1 | [回首页](home)
2 |
3 | ## 基本状况
4 |
5 | + 周报内容:报告进展状态,是完成进度还是拖延,简单说明即可
6 | + 美国联系人:walter.stockwell@dji.com
7 |
8 | ## 周报一览
9 |
10 | ### 160801-160807
11 |
12 | UTM 项目本周因需求变更而重新置顶计划,本周已完成:
13 |
14 | 1. 和 Mingyu 汇报,确定一期任务
15 | 2. 和 DJI GO 团队沟通
16 | 3. 新的项目计划与需求文档
17 | 4. 技术调研与测试
18 |
19 | ### 160725-160731
20 |
21 | UTM 项目本周已完成进度:
22 |
23 | 1. 和美国同事Walter对接,确定防撞方案、数据收集范围和空域预留机制
24 | 2. 完成技术调研&测试,包括后端服务器框架、信息源获取、接口设计方案
25 | 3. 向mingyu汇报,制定短期内项目需求(两个功能:临近飞机/航线提醒、威胁天气提醒)
26 |
27 | ## 时间线
28 |
29 | ### 160803 和 DJI GO 对接
30 |
31 | 几个问题
32 |
33 | + 监管那边的数据上传是怎么做的,有没有具体的文档
34 | + 我们这边如何可以自己更改应用做测试版?主要涉及两个方面:地图绘制和即时通知
35 | + iOS 和安卓这边有技术问题可以问谁?监管那边是怎么合作的?
36 | + 数据上传部分问题,界面设计问题和谁对接
37 |
38 | ### 160801 向 Mingyu 汇报
39 |
40 | **项目计划大改**
41 |
42 | mingyu聊一下大方向,以免跑偏了后面需要花比较多时间。
43 |
44 | 和现在 utm 项目的异同,为什么需要重新设计
45 |
46 | utm 是我们第一次为全部用户提供了解周围情况,以及其他飞机,甚至是社交领域的基础,在上面可以有很多不一样的探索和尝试
47 |
48 | **从中学到的,理清核心需求,找出核心贡献点,太长远的且依赖别人的暂时看来虚无缥缈的需求不做,这一点很重要**
49 |
50 | #### 目标
51 |
52 | + 阶段目标:可实际测试运行的 UTM 系统
53 | + 意义:参与到欧美市场的发展趋势中,达到入场门槛,占据一席之地,拓宽受众群体
54 |
55 | #### 开发计划
56 |
57 | + 基础系统搭建(时间:2-3 周,8/19,产出:可运行的基础系统)
58 | + 虚拟机申请和配置、技术可行性测试(1周)
59 | + 后台服务器架构设计与搭建,数据流设计与处理(1-2周)
60 | + 基础功能(时间 4-6 周,9/30,产出:可以实地测试的 UTM 系统)
61 | + 数据传输:DJI GO 与服务端连接,数据双向传输测试(1周)
62 | + 飞行通知:分为两种,针对起飞用户和附近用户(1-2周)
63 | + 预留空域:暂时以通知的形式,例如当用户飞入已预留的空域则进行通知(1-2周)
64 | + 天气状况:雨、雪、雹、大风、雾(1周)
65 | + 飞机航线状况(1周)
66 | + 高级功能(时间 4-6 周,11/11,产出:带高级功能的 UTM 系统)
67 | + 数据分析统计:热点飞行地区,危险地区(1周)
68 | + 用户广播消息:商业用户、娱乐用户,结合 Facebook 等社交平台(1-2周)
69 | + 智能防撞:具体细则还需要跟 Walter 讨论(2-4周)
70 |
71 | 注:目前此项目的开发人员只有我一人,还需要承担一部分产品经理的职责,另外因为如故团队人员调整我还需要负责数据平台事宜,故各阶段可能会比计划中延迟 1-3 周
72 |
73 | #### 与现有监管项目的区别
74 |
75 | + 用户
76 | + 监管:政府或其他监管部门;用户量有限,平稳增长
77 | + 服务:所有 DJI 无人机用户 及 互联网用户;用户量较多,可能爆发增长
78 | + 目的
79 | + 监管:提供一种监管方式,推进立法
80 | + 服务:支持超视距飞行与智能辅助飞行
81 | + 意义
82 | + 监管:促进无人机产业的规范化,满足政府的监管需求
83 | + 服务:参与到欧美市场的发展趋势中,入场占位,拓宽受众群体
84 | + 方法
85 | + 监管:审批、流程、管理;半自动、应用
86 | + 服务:稳定、服务、社交;自动、服务
87 | + 模式
88 | + 监管:信息收集、管理;信息流聚合;无向外传播
89 | + 服务:基于地理位置的信息聚合;信息流发散; LBS 方式、社交网络方式
90 | + 地区
91 | + 监管:国内
92 | + 服务:美国、欧洲
93 |
94 | #### 未来方向
95 |
96 | + 无人机社交的尝试,和 Facebook 连接,走 Nike Running Plus 路线,可以在 Facebook/Twitter 发送状态(包含路线、主体、图片等各类信息),别人可以点赞关注和评论欢呼等
97 | + 超视距飞行的基础技术支持,更高级的环境感知
98 | + NASA UTM 系统的接入
99 | + 多机集群协同飞行的支持,表演性质的固定线路飞行支持
100 |
101 | #### 需求
102 |
103 | + 开发人员
104 | + 测试用无飞机:用于数据传输测试与实地飞行测试
105 | + 测试版 DJI GO 程序:用于技术可行性测试、数据传输测试与实地飞行测试
106 |
107 | ### 160721 Andrew 开会
108 |
109 | + 决定重新设计系统,根据需求来 break down
110 | + 走 mobile sdk 系统的工作流程,脚本部署,统一登录与帐号管理,很先进(这个要具体说一下) OneLogin,包含具体的帐号和配置
111 | + node.js
112 | + Amazon IoT 服务
113 | + ansible
114 | + terraform
115 | + 有自动部署的脚本
116 | + Amazon Lambda
117 | + Elastic Search
118 | + Blue / Green 发布
119 | + Amazon Kinesis
120 | + Amazon Container
121 | + ELK, Elasticsearch, Logstash, Kibana
122 | + grpc.io
123 | + Jenkins
124 | + Dev, Staging, Product
125 | + 基于 mobile SDK 自己开发
126 | + Springboot 和 websocket 会有问题
127 |
128 | ### 160718 更新
129 |
130 | + 代码无文档、无单元测试,通过 jar 包部署,没有持续集成
131 | + 无人机上传数据的格式,绘图与通知稍后我与 DJI GO 对接
132 | + 代码 Host 在我们的 gitlab
133 | + 机器由我们这边申请
134 | + 初步构想:Jenkins+Gradle+gitlab 自动构建发布,spring boot
135 | + Andrew 部分的数据上传代码
136 |
137 | 让 Walter 跟 mingyu 说该项目和 onboard sdk 不冲突,可以安排人(Andrew)来做
138 |
139 | 代码能跑起来了
140 |
141 | 后面加入数据分析的东西,Spark Streaming
142 |
143 | 快立项了申请招人
144 |
145 |
146 | ### 160712 邮件回复
147 |
148 | + 立项相关翻译与事宜,邮件同意,等等
149 | + 目前我们只能用自己制造的数据来进行测试,美国那边收集信息和测试的可能性
150 | + 应该很快会收到代码访问的权限(只读)
151 | + list of actions 可以应用于目前系统
152 | + DJI GO 具体的测试方式,能否有测试版
153 | + 会部署另一套在美国的系统
154 | + Weekly meeting call 时间
155 | + Confluence is better
156 | + 如何看待 google 和 amazon 提出的 proposal
157 |
158 | Purpose: Deploy a UTM system as part of DJI GO in NA and EU to help our drones to know more about the environment to make flights safer and more convenient.
159 |
160 | Abstract:
161 |
162 | 1. For User: The UTM system will be combined with DJI GO, providing the features of data uploading, message notification and environment sensing.
163 | 2. For Management: Different types of administrators can set up NFZ(no flying zone) or notify nearby drones' pilots
164 | 3. Provide importing and exporting solution for 3rd party application or other UTM system.
165 |
166 | Plan:
167 |
168 | 1. Explore the possibility of UTM system in promoting safety and efficiency for drones
169 | 2. Build the system based on requirements and coop with other system in order to make full use of resources
170 | 3. Define protocol and standard along with other information sources and UTM system.
171 |
172 | ### 160708 团队会议
173 |
174 | + 基本组件
175 | + 【厂方】适航系统
176 | + 【监管方】飞机注册系统:身份绑定
177 | + 【监管方】公安局对接 APP
178 | + 相关问题
179 | + 给谁做,Demo 还是产品
180 | + 确定需求
181 | + 客户端开发与展示,geofencing
182 | + 拉上 Branden 一起聊一次
183 | + 交互哪边出
184 |
185 | ### 160708 与美国团队会议要点
186 |
187 | + 项目正式成立,下午丁准去要项目编号
188 | + Walter 是 leader,Andrew 是 Tech leader
189 | + 不仅仅要考虑美国、欧洲,还有其他地区,本地化
190 | + 沟通机制建立,开发方式,需求讨论
191 | + 下午两点沟通
192 |
193 | ### 160630 与 Branden 沟通
194 |
195 | 拨打美国电话 9001 + 美国电话,比如 9001 202 826 3111 电话是真的
196 |
197 | > UTM 这个项目怎么看,价值所在
198 |
199 | 有很大的价值,在安全上有很大提升。FAA 最近的趋势是无人飞行器要在视距范围内飞行,这样才能保证安全,不然一旦超过视距,就没有办法避免碰撞。而 UTM 项目可以突破这个限制,即使在用户视距之外,也可以通过手机屏幕了解周围情况(环境感知),来避免碰撞。
200 |
201 | > 和 Geo Fencing 项目是否冲突
202 |
203 | 不冲突,是很好的互为补充,可以统一通过 DJI GO 来展示给用户,比方说禁飞区,或者诸如火灾、球赛等涉及『动态交通流量』管制的信息,但具体还有一些技术问题需要解决。
204 |
205 | > 如何做,具体的时间安排
206 |
207 | 以为简单的事情可能很难(显示多边形地图,目前由于飞控的计算能力问题以圆形为主),以为很难的问题可能很简单。要考虑具体展示什么给用户。
208 |
209 | 最重要的信息是获取民航飞机、直升飞机、热气球等载人飞行器的飞行信息,避免无人机和它们相撞。这部分工作可能比较复杂,在不同的国家和地区需要不同的对接方式
210 |
211 | > Walter, Darren 是否需要参与,扮演什么角色
212 |
213 | 背景:以 NASA 牵头,联合许多美国科技公司(尤其是 Amazon,因为要使用无人机送货)在做一套与我们设想类似但不太一样的 UTM 系统(根据美国法律规定只有美国公司可以参与和 NASA 的合作研究),但更多主要的是涉及受控飞行,类似于航空航线系统的无人机版,给不同的无人机设定好不同的路线避免碰撞(这里我们针对个人飞行行为,有比较大的不同)。这里可以考虑换个代号,不然以后推广很容易造成误解。
214 |
215 | Walter 对于 NASA UTM 有很深的了解,我们可以从他身上了解 NASA UTM 的相关技术标准和动态,从中参考借鉴
216 |
217 | #### 给 Walter 的话
218 |
219 | Hi Walter,
220 |
221 | John and I had a conversation with Branden and he said this UTM project is good and worth developing. I've sent Mingyu a email about it. We can find some time to have further discussion about our DJI UTM project.
222 |
223 | Besides, Branden told us that you are quite familiar with the NASA UTM project. We really like to have more information about it from you. But before that, you can talk to Mingyu about this UTM project and make it a real project. We think you can lead the project and we can give you support on building the system.
224 |
225 | #### 杂项
226 |
227 | + Branden 可能在 9 月份会来深圳,可以当面沟通
228 | + 跟 Walter 发消息,要他跟 mingyu 说一下,沟通一下接下来的安排
229 | + 跟 hank,mingyu,fiona,john,pillar 发邮件
230 |
231 |
232 | ### 160623 会议准备
233 |
234 | Unmanned Traffic Management System(UTMS)
235 |
236 | #### Target
237 |
238 | 1. 摸底
239 | 2. 功能(原型,API)
240 | 3. 合作方式(我们这边来主导?)
241 |
242 | + we should define the concept -> UTMS -> standard -> laws
243 | + define protocol
244 | + should not use the word 'tracking' as it's related to some privacy issue.
245 | + focus on traffic(whole thing), not tracking(more personal). the focusing points are different
246 |
247 | #### Overview
248 |
249 | + China UTM project. Testing by ourself in hainan province(plan)
250 | + collect data from other sources
251 | + connect to other UTMS for drone such as package delivery plan from Amazon
252 | + cloud platform - realtime traffic, weather, other info about safer operation
253 | + Mobile app - send, location, altitude, speed, other info about telemetry, in real time
254 |
255 | #### Feature
256 |
257 | + Nearby DJI UAS Operations Warning, popular flying area, anonymized telemetry
258 | + With other extended features
259 | + Real-time ID - share data
260 |
261 | #### Plan
262 |
263 | 1. staffing, backend engineering team(US), android app -> their progress, what's the team.
264 | 2. integrated with DJIGO app and backend -> we'd like to make the UTMs system independent and provide apis to DJIGO
265 |
266 | #### Questions
267 |
268 | + prototype status, how they use mobile SDK? displaying?
269 | + tech stack
270 | + drone -> phone -> server, how to upload?
271 | + detailed plan for the UTMS
272 | + admin interface needed?monitor the conditions
273 | + DJIGO app 和 SDK app 的共性
274 | + Web Client 和 ID Client 是什么
275 | + ADS-B range, the protocol in sending the data
276 |
277 | #### People
278 |
279 | + Backend, 3 FTE(US), architecture, infrastructure, coding, testing, operations
280 | + DJIGO app, 2 PTE for the functions in the app. join US mobile SDK team? 这里有个疑问,darren 和 sdk 那哥们儿是一派的?
281 | + Product, 1 PTE product management, fully specified features, mocks, functionalities
282 | + Project, 1 PTE project management, coordinate
283 | + Marketing, 1 PTE marketing
284 |
285 | 每个人是干嘛的
286 |
287 | + Andrew: 硅谷工程师
288 | + 秉臻: 软件部的 pm,DJI GO
289 | + Darren: 美国那边弄 UTM 标准的,没啥进展
290 | + Walter: 硅谷那边的头
291 |
--------------------------------------------------------------------------------
/Services/dji-service/utm/README.md:
--------------------------------------------------------------------------------
1 | # US UTM 开发相关
2 |
3 | ## 阅读指引
4 |
5 | 本文档会依次介绍数据平台开发相关的知识,依据功能的不同分为不同的板块。先介绍总体架构,然后是按照数据流的顺序进行介绍。
6 |
7 |
8 |
9 | ## 基本信息
10 |
11 | ### 技术栈
12 |
13 | + Go 1.7
14 | + Beego 1.7.0
15 | + Redis 3.2
16 | + MySQL
17 | + Nginx
18 |
19 | ### 架构
20 |
21 | 
22 |
23 | 服务器目前只有一台 usutm01,都是在本机运行。
24 |
25 | + 利用 Redis 的 Geo 功能来保存位置及相关计算,用 name 作为飞机详细信息的 key
26 | + 连接池,不必担心数据一致性的维护
27 |
28 | 一条飞行记录到来
29 |
30 | + 对应 Redis 记录两条
31 | + GEOADD location lat long name (这里 name 是 droneid) - 首先需要从 set 中移除这个 name 对应的记录
32 | + 添加或更新 key(即上面的 name) 和 value(就是该条飞行记录的详细信息) - 包含过期时间
33 | + Redis 需要定期清理死键
34 | + 考虑走 Kafka 进行流处理,也可以是一个备份
35 |
36 | 历史数据保存在 MySQL 中,一个月以上的,按天保存到 S3 中,线上的数据使用 Redis 保存
37 |
38 | ## 开发相关
39 |
40 | ### 任务列表
41 |
42 | + S3 保存历史记录
43 | + 监控功能
44 | + Top 10 List
45 | + 利用 Redis 做 Bloomfilter
46 | + Last Index 用户最近访问记录,lpush, lpop
47 | + Fast Transaction with Lua, 小的更新逻辑
48 | + 监控 Redis 可以用 hypnos/redisLive
49 | + 考虑用位进行统计,bit 操作
50 | + 模拟器部分
51 |
52 | ### 部署
53 |
54 | + 跳板机帐号:usutm-staging
55 | + 密码:ag&cEqj1dy+W5O*bTof_S-xj
56 | + 主机名:sstg-usa-utm01(52.44.34.230; 10.1.1.21)
57 |
58 | 执行脚本 `ubuntu_install.sh`
59 |
60 | 修改权限 `sudo chmod 777 *`
61 |
62 | 安装 rz 工具上传 `sudo apt install lrzsz`
63 |
64 | 部署的时候只要把编译好的应用放到服务器上后台执行即可
65 |
66 | 环境配置使用
67 |
68 | + `ubuntu-nginx-install.sh`
69 | + `ubuntu-redis-install.sh`
70 |
71 | ### 本地测试
72 |
73 | + 进入 `$GOPATH/src/utm-server/` 运行 `bee run -gendoc=true -downdoc=true`
74 | + 测试数据库 `mysql -uroot -pAyQnuWucFNX2EtKK -h121.43.181.146 -P20097`
75 | + 公司的 iMac 中的 Ubuntu 虚拟机,密码 11223345
76 |
77 |
78 | ## 技术点
79 |
80 |
81 |
82 | ### 客户端
83 |
84 | + 确定要发送的信息
85 | + 确定如何匿名表示身份 - uuid 或其他加密算法
86 | + 地图展示测试(Objective-C 需要了解细节)
87 | + mobile SDK
88 | + 传输加密(HTTPS, TCP 加密,如何防止数据伪造)
89 | + 传输格式
90 | + WebSocket
91 | + 方便集成到 DJI GO 中
92 | + 与 Geo fencing 和 NFZ 协调(比方说在这两个区域中,不能进行空域预留)
93 | + 用户可以选择是否加入,可以随时退出(需要一个开关来切换)
94 | + opt-in means to choose to be involved in or part of the scheme
95 | + 用户需要联网,联网检测
96 | + 通知用户
97 |
98 | ### 服务器端
99 |
100 | 尽量不要太依赖 AWS,尤其是后端部分
101 |
102 | + 负载均衡
103 | + AWS ELB
104 | + 容器
105 | + AWS EC2 + Docker
106 | + 分布式集群管理
107 | + AWS Autoscaling + Ansible
108 | + 日志及数据备份存储
109 | + Amazon S3
110 | + 缓存 前期可以暂时不用,直连数据库或者自己用 EC2 搭建 Redis
111 | + Amazon ElastiCache
112 | + 安全性
113 | + VPC 隔离
114 | + 数据生成器
115 | + 消息队列
116 | + Kafka(方便后期与机器学习集群绑定,日志 ELK 也可以走这一套)
117 | + 数据库
118 | + MongoDB
119 | + 框架
120 | + 子服务 解耦
121 | + 空域检索服务(附近无人机,~~包含广播~~的消息)
122 | + (砍掉)~~空域规划服务(预留空域)~~
123 | + 天气情况服务(附近天气)
124 | + (砍掉)~~数据统计服务(飞行热点、飞行危险度)~~
125 | + 数据验证服务(每个飞机的匿名 id 以及传输加解密)
126 | + 虚拟机监控
127 |
128 | 国内部署考虑:阿里云的 SDK 限制
129 |
130 |
131 | ## 归档
132 |
133 | ### 术语
134 |
135 | + **智能辅助飞行**:指的是在联网条件下,通过后端服务器获取无人机周边的各类信息,增加环境感知能力,包含智能避障
136 | + **超视距飞行**:指人肉眼无法看到无人机主体,仅能通过已连接设备的屏幕来判断无人机位置的飞行,需要考虑图传因各种问题信号不稳定甚至失效的问题
137 | + **NASA UTM**:有 NASA 牵头的总 UTM 系统,各个公司的 UTM 系统最终都需要接入到此系统中
138 |
139 | ### 老开发计划
140 |
141 | 已失效
142 |
143 | + 基础系统搭建(时间:2-3 周,8/19,产出:可运行的基础系统)
144 | + 虚拟机申请和配置、技术可行性测试(1周)
145 | + 后台服务器架构设计与搭建,数据流设计与处理(1-2周)
146 | + 基础功能(时间 4-6 周,9/30,产出:可以实地测试的 UTM 系统)
147 | + 数据传输:DJI GO 与服务端连接,数据双向传输测试(1周)
148 | + 飞行通知:分为两种,针对起飞用户和附近用户(1-2周)
149 | + 预留空域:暂时以通知的形式,例如当用户飞入已预留的空域则进行通知(1-2周)
150 | + 天气状况:雨、雪、雹、大风、雾(1周)
151 | + 飞机航线状况(1周)
152 | + 高级功能(时间 4-6 周,11/11,产出:带高级功能的 UTM 系统)
153 | + 数据分析统计:热点飞行地区,危险地区(1周)
154 | + 用户广播消息:商业用户、娱乐用户,结合 Facebook 等社交平台(1-2周)
155 | + 智能防撞:具体细则还需要跟 Walter 讨论(2-4周)
156 |
157 | 注:目前此项目的开发人员只有我一人,还需要承担一部分产品经理的职责,另外因为如故团队人员调整我还需要负责数据平台事宜,故各阶段可能会比计划中延迟 1-3 周
158 |
159 |
--------------------------------------------------------------------------------
/Services/djigo/dji-mobile-logging/doc/source/index.html.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Dji mobile日志收集API
3 |
4 | language_tabs:
5 | - ruby
6 | - Objective-C
7 | - Java
8 |
9 | toc_footers:
10 | - 可视化报表
11 | - 问题与建议
12 |
13 |
14 | search: true
15 | ---
16 |
17 | # Introduction
18 |
19 | 这是一个简单实用的日志收集系统, 支持两种上传方式:
20 |
21 | 1. 使用http post表单
22 | 2. 上传日志文件
23 |
24 | 传输数据格式使用 [msgpack](http://msgpack.org), 原因是:
25 |
26 | * 目前报表需求不是特别明确,使用可以任意定义key的序列化格式更加符合实际。当整个系统和业务需求更加明确以后,可以考虑效率更高的Avro、Protobuf。
27 | * 相对于同样规则自由的JSON, msgpack格式序列化之后数据更小,传输效率更高。
28 | * 支持的语言多, 使用简单。
29 |
30 | 目前系统运行在测试环境中,地址:120.27.228.232
31 |
32 |
33 | # 使用HTTP Post表单
34 |
35 | ## HTTP Request
36 | `POST http://host/api/v1/log`
37 |
38 | ### 用Token识别APP
39 | 在HTTP header利用关键字:
40 | `dji_app_token`
41 | 标识当前发送日志的app名称和客户端,比如,我们可以使用唯一的token表明这是Dji Go的安卓客户端。
42 |
43 |
44 | > 将序列化后的数据post到这个API,可以发送单个或者多个事件
45 |
46 | ```ruby
47 | require 'rest-client'
48 | require 'msgpack'
49 |
50 | header = {dji_app_token: "token_for_your_app_and_client"
51 | content-type: "application/x-msgpack"}
52 | # 发送单个事件
53 | RestClient.post('http://#{host}/api/log', MessagePack.pack({k:"v"}), header)
54 |
55 | # 使用数组发送多个事件
56 | RestClient.post('http://#{host}/api/log',
57 | MessagePack.pack([{k1:"v1", k2:"v2"}, {k3:"v3", k4:"v4"}]),
58 | header)
59 | ```
60 |
61 | > 这段代码会发送一个单事件和一个批量事件
62 |
63 | ```json
64 | {
65 | "k":"v"
66 | }
67 | 和
68 | [
69 | {
70 | "k1":"v1",
71 | "k2":"v2"
72 | },
73 | {
74 | "k3":"v3",
75 | "k4":"v4"
76 | }
77 | ]
78 | ```
79 |
82 |
83 |
84 | # 使用Log文件上传
85 |
86 | ## HTTP Request
87 | `POST http://host/api/v1/upload`
88 | ### 用Token识别APP
89 | 在HTTP header利用关键字:
90 | `dji_app_token`
91 | 标识当前发送日志的app名称和客户端,比如,我们可以使用唯一的token表明这是Dji Go的安卓客户端。
92 |
93 | > 如果日志数据比较大,可以通过上传文件的方式发送
94 |
95 | ```ruby
96 | require 'rest-client'
97 | require 'msgpack'
98 |
99 | # 写文件的过程,注意多个纪录之间不需要换行符
100 | filename = 'logfile'
101 | File.open(filename, "a+") do |f|
102 | f.write(MessagePack.pack({k:"v"}))
103 | f.write(MessagePack.pack([{k1:"v1", k2:"v2"}, {k3:"v3", k4:"v4"}]))
104 | end
105 |
106 | # 真正发送上传文件请求
107 | header = {dji_app_token: "token_for_your_app_and_client",
108 | content-type: "application/x-msgpack"}
109 | RestClient.post('http://#{host}:4567/api/upload', log: File.new(filename), header)
110 | ```
111 |
112 | > 这段代码会把一个单事件和一个批量事件写入文件中,然后上传
113 |
114 | ```json
115 | {
116 | "k":"v"
117 | }
118 | 和
119 | [
120 | {
121 | "k1":"v1",
122 | "k2":"v2"
123 | },
124 | {
125 | "k3":"v3",
126 | "k4":"v4"
127 | }
128 | ]
129 | ```
130 |
131 |
134 |
135 | # Log上传之后
136 |
137 | ## ELK服务
138 | 日志数据会保存在[Elasticsearch](https://www.elastic.co/)中,自动建立索引,并且通过[Kibana](https://www.elastic.co/products/kibana)能够进行可视化的关键字搜索和报表生成。
139 |
140 | 
141 |
142 |
145 |
146 | ## AWS s3
147 | 日志会定期归档到AWS s3里, 目标是保留所有用户的数据。
148 |
--------------------------------------------------------------------------------
/Services/ds/documents/FlightHub.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/FlightHub.pdf
--------------------------------------------------------------------------------
/Services/ds/documents/FlightHub合作分工.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/FlightHub合作分工.docx
--------------------------------------------------------------------------------
/Services/ds/documents/大疆创新安全技术白皮书_初稿框架.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/大疆创新安全技术白皮书_初稿框架.docx
--------------------------------------------------------------------------------
/Services/ds/documents/大疆国内实名制项目v0.1.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/大疆国内实名制项目v0.1.docx
--------------------------------------------------------------------------------
/Services/ds/documents/方案设计图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/方案设计图.png
--------------------------------------------------------------------------------
/Services/ds/documents/无人机管控与侦测平台建设需求(初版).doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人机管控与侦测平台建设需求(初版).doc
--------------------------------------------------------------------------------
/Services/ds/documents/无人机管控与侦测平台技术方案(1.5).doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人机管控与侦测平台技术方案(1.5).doc
--------------------------------------------------------------------------------
/Services/ds/documents/无人机身份认证方案v0.4.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人机身份认证方案v0.4.docx
--------------------------------------------------------------------------------
/Services/ds/documents/无人机身份认证方案v0.5.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人机身份认证方案v0.5.docx
--------------------------------------------------------------------------------
/Services/ds/documents/无人驾驶航空器安全管理数据库计划书.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人驾驶航空器安全管理数据库计划书.docx
--------------------------------------------------------------------------------
/Services/ds/documents/监管平台2017年Q1改造升级计划.txt:
--------------------------------------------------------------------------------
1 | 监管平台2017年Q1改造升级计划
2 | 3.6-3.10
3 | ① 上报与管理后台分拆,保证上报数据不丢失
4 | ② 生产服务增加newrelic统计,对服务进行监控
5 | ③ 增加websocket连接统计,统计账号连接数、连接ip
6 | ④ 管理后台filter增加接口使用记录
7 | ⑤ 增加短信发送和邮件发送异步处理,邮件服务使用http替换smtp
8 | ⑥ 统一分支,严格使用master作为生产分支,develop作为测试分支
9 | ⑦ 登录态使用数据库同步,当服务器缓存查不到的时候去数据库查询
10 | ⑧ 清理账号,提供权限清单
11 | ⑨ 解决地图坐标偏移、增加小工具
12 |
13 |
14 | 3.13-3.17
15 | ① 迁移原node程序处理的业务逻辑(胡强、添兴)
16 | ② 增加所有管理接口的后台权限验证(仲贤)
17 | ③ 统计报表summary改为按月分表(仲贤)
18 |
19 | 3.20-3.24
20 |
21 | ③ 修改服务为单点登录,和鉴权同时修改(仲贤)
22 | ② 升级修改websocket通信协议,增强通信安全性
23 | ③ 集中优化各处明显的性能问题
24 | ④ 完善所有接口的注释
25 |
26 | 3.27-3.31
27 | 预留一周补充可能插入的紧急需求或延期任务
28 |
29 | 系统功能性
30 | 1、前后端接口迁移(禁飞区管理、 操作记录、 )
31 | 2、分布式服务,多点部署后的websocket连接,给指定用户发消息
32 | 3、增加统一到导出历史飞行记录功能, 与建哥那边数据统一
33 | 4、微服务改造:上报服务,后台管理服务,第三方接口服务
34 | 5、考虑未来的监听设备管理功能,提供更好的架构和数据表结构。将客户端上报的数据接口与监听设备的上报接口分离开来,分开处理。
35 | (很多种类的监听设备上报数据, 考虑app和监听设备的远程自动强制更新)
36 |
37 | 系统性能,稳定性等方面
38 | 1、 查询历史飞行记录(按月分表、 建立索引、)大量数据后的处理
39 | 2、 新增功能,写测试代码,提高系统的可靠性。
40 | 3、 newRelic性能监控,相比人工排查,能较为快速找到性能瓶颈
41 | 4、 日志处理分析,统计。
42 |
43 | 规范性
44 | 1、代码注释规范。
45 | 2、正式环境和测试环境分支,发包规范。
46 | 3、接口文档的规范性,一切皆有文档,需求也需要
47 | 4、日志的统一log4j, 生产环境不用打印一些info信息。
--------------------------------------------------------------------------------
/Services/ds/documents/监管平台系统设计报告.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/监管平台系统设计报告.docx
--------------------------------------------------------------------------------
/Services/ds/documents/监管项目域名与服务器.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/监管项目域名与服务器.xlsx
--------------------------------------------------------------------------------
/Services/ds/flying_mgr_portal/src/main/java/controller/SearchFlyingRecordController.java:
--------------------------------------------------------------------------------
1 | package controller;
2 |
3 |
4 | import model.AppModel;
5 | import model.SearchFlyingRecordModel;
6 | import org.json.JSONObject;
7 | import org.springframework.http.MediaType;
8 | import org.springframework.web.bind.annotation.*;
9 | import util.ResponseTemplate;
10 |
11 | /*
12 | * @Description: 获取历史飞行记录, 供数据平台调用
13 | * @Author hanks.hu
14 | * @Date 17/3/29
15 | */
16 | @RestController
17 | @RequestMapping(produces = { MediaType.APPLICATION_JSON_UTF8_VALUE })
18 | public class SearchFlyingRecordController {
19 |
20 | /**
21 | * 查询符合条件的历史飞行记录的总数目
22 | *
23 | * @controller /api/flyingRecord/history/total
24 | * @method POST
25 | * @contentType application/x-www-form-urlencoded
26 | * @header appID-string-required-appID
27 | * @header secret-string-required-消息体签名
28 | * @param orderID-string-optional-飞行编号
29 | * @param droneID-string-optional-飞机sn
30 | * @param pilot-string-optional-驾驶员skypixel账号名
31 | * @param contact-string-optional-驾驶员skypixel填写的联系方式
32 | * @param address-string-optional-起飞地点
33 | * @param latitude-string-optional-起飞地点纬度
34 | * @param longitude-string-optional-起飞地点经度
35 | * @param radius-string-optional-区域范围大小(m)
36 | * @param droneType-string-optional-飞机型号
37 | * @param beginDate-string-optional-开始时间(格式: 2016-12-12 12:12)
38 | * @param endDate-string-optional-结束时间(格式: 2016-12-12 12:12)
39 | * @param minDuration-number-optional-最短飞行时长(s)
40 | * @param maxDuration-number-optional-最长飞行时长(s)
41 | * @param minPeakHeight-number-optional-最低的最高点飞行高度(m)
42 | * @param maxPeakHeight-number-optional-最高的最高点飞行高度(m)
43 | * @param illegal-boolean-optional-违规情况(默认全部, true: 违规, false: 不违规)
44 | * @return
45 | */
46 | @RequestMapping(path = "/api/flyingRecord/history/total", method = RequestMethod.POST)
47 | @ResponseBody
48 | public String handleGetHistoryTotal(@RequestHeader(name = "appID") String appIDStr, @RequestHeader(name = "secret") String secret, @RequestBody(required = false) String reqBody,
49 | String orderID, String droneID, String pilot, String contact, String address, String latitude, String longitude, String radius, String droneType,
50 | String beginDate, String endDate, Double minDuration, Double maxDuration, Double minPeakHeight, Double maxPeakHeight, Boolean illegal) {
51 |
52 | Integer appID = Integer.parseInt(appIDStr);
53 | if (!AppModel.isLegalData(appID, reqBody, secret)) {
54 | return ResponseTemplate.invalidToken();
55 | }
56 |
57 | JSONObject ret = SearchFlyingRecordModel.getHistoryTotal(orderID, droneID, pilot, contact, address, latitude, longitude, radius, droneType, beginDate, endDate, minDuration,
58 | maxDuration, minPeakHeight, maxPeakHeight, illegal);
59 | return ResponseTemplate.responseTemplateJSON(ret);
60 | }
61 |
62 |
63 | /**
64 | * 查询符合条件的历史飞行记录
65 | *
66 | * @controller /api/flyingRecord/history
67 | * @method POST
68 | * @contentType application/x-www-form-urlencoded
69 | * @header appID-string-required-appID
70 | * @header secret-string-required-消息体签名
71 | * @param pagination-integer-optional-页码(默认首页)
72 | * @param orderID-string-optional-飞行编号
73 | * @param droneID-string-optional-飞机sn
74 | * @param pilot-string-optional-驾驶员skypixel账号名
75 | * @param contact-string-optional-驾驶员skypixel填写的联系方式
76 | * @param address-string-optional-起飞地点
77 | * @param latitude-string-optional-起飞地点纬度
78 | * @param longitude-string-optional-起飞地点经度
79 | * @param radius-string-optional-区域范围大小(m)
80 | * @param droneType-string-optional-飞机型号
81 | * @param beginDate-string-optional-开始时间(格式: 2016-12-12 12:12)
82 | * @param endDate-string-optional-结束时间(格式: 2016-12-12 12:12)
83 | * @param minDuration-number-optional-最短飞行时长(s)
84 | * @param maxDuration-number-optional-最长飞行时长(s)
85 | * @param minPeakHeight-number-optional-最低的最高点飞行高度(m)
86 | * @param maxPeakHeight-number-optional-最高的最高点飞行高度(m)
87 | * @param illegal-boolean-optional-违规情况(默认 全部, true: 违规, false: 不违规)
88 | * @return
89 | */
90 | @RequestMapping(path = "/api/flyingRecord/history", method = RequestMethod.POST)
91 | @ResponseBody
92 | public String handleGetHistory(@RequestHeader(name = "appID") String appIDStr, @RequestHeader(name = "secret") String secret, @RequestBody(required = false) String reqBody,
93 | Integer pagination, String orderID, String droneID, String pilot, String contact, String address, String latitude, String longitude, String radius, String droneType,
94 | String beginDate, String endDate, Double minDuration, Double maxDuration, Double minPeakHeight, Double maxPeakHeight, Boolean illegal) {
95 |
96 | Integer appID = Integer.parseInt(appIDStr);
97 | if (!AppModel.isLegalData(appID, reqBody, secret)) {
98 | return ResponseTemplate.invalidToken();
99 | }
100 |
101 | JSONObject ret = SearchFlyingRecordModel.getHistory(pagination, orderID, droneID, pilot, contact, address, latitude, longitude, radius, droneType, beginDate, endDate,
102 | minDuration, maxDuration, minPeakHeight, maxPeakHeight, illegal);
103 | return ResponseTemplate.responseTemplateJSON(ret);
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/extract_json.py:
--------------------------------------------------------------------------------
1 | import sqlite3
2 | import pandas as pd
3 | import os
4 | import json
5 |
6 | # Create an SQLite Database and Define Schema
7 | def create_database(db_path):
8 | conn = sqlite3.connect(db_path)
9 | cursor = conn.cursor()
10 |
11 | # Create table for JSON data with added aircraftName column
12 | cursor.execute('''
13 | CREATE TABLE IF NOT EXISTS json_records (
14 | id INTEGER PRIMARY KEY AUTOINCREMENT,
15 | file_path TEXT,
16 | version INTEGER,
17 | aircraftName TEXT,
18 | subStreet TEXT,
19 | street TEXT,
20 | city TEXT,
21 | area TEXT,
22 | latitude REAL,
23 | longitude REAL
24 | )
25 | ''')
26 |
27 | # Create table for CSV data
28 | cursor.execute('''
29 | CREATE TABLE IF NOT EXISTS csv_locations (
30 | id INTEGER PRIMARY KEY,
31 | Name TEXT,
32 | id_sub TEXT,
33 | Town TEXT,
34 | Prefecture TEXT,
35 | lat REAL,
36 | long REAL,
37 | facility_type TEXT,
38 | corroboration_level TEXT,
39 | ETNAM TEXT,
40 | Shawn_Zhang_list TEXT,
41 | Shawn_Zhang_num INTEGER,
42 | ASPI_2020_num INTEGER,
43 | XJVDB TEXT,
44 | Media_reports TEXT,
45 | Researchers TEXT,
46 | Links TEXT,
47 | Links_2 TEXT,
48 | Links_3 TEXT,
49 | Links_4 TEXT
50 | )
51 | ''')
52 |
53 | conn.close()
54 |
55 | # Process JSON File and Insert Data into SQLite Database
56 | def process_json_file(json_path, db_path):
57 | conn = sqlite3.connect(db_path)
58 | cursor = conn.cursor()
59 |
60 | try:
61 | with open(json_path, 'r') as file:
62 | data = json.load(file)
63 | version = data.get('version')
64 | info = data.get('info', {})
65 | aircraft_name = info.get('aircraftName')
66 | subStreet = info.get('subStreet')
67 | street = info.get('street')
68 | city = info.get('city')
69 | area = info.get('area')
70 | latitude = info.get('latitude')
71 | longitude = info.get('longitude')
72 |
73 | cursor.execute('''
74 | INSERT INTO json_records (file_path, version, aircraftName, subStreet, street, city, area, latitude, longitude)
75 | VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
76 | ''', (json_path, version, aircraft_name, subStreet, street, city, area, latitude, longitude))
77 | conn.commit()
78 | except json.JSONDecodeError:
79 | print(f"Invalid JSON in file {json_path}")
80 |
81 | conn.close()
82 |
83 | # Create the SQLite database and tables
84 | db_path = 'flight_data.db'
85 | create_database(db_path)
86 |
87 | # Read the CSV file, rename columns, and insert data into SQLite database
88 | csv_path = '210720_all_locations_BFN.csv'
89 | df_csv = pd.read_csv(csv_path, sep='\t', encoding='ISO-8859-1')
90 |
91 | # Rename DataFrame columns to match the SQLite table schema
92 | df_csv.columns = [
93 | 'id', 'Name', 'id_sub', 'Town', 'Prefecture', 'lat', 'long', 'facility_type',
94 | 'corroboration_level', 'ETNAM', 'Shawn_Zhang_list', 'Shawn_Zhang_num', 'ASPI_2020_num',
95 | 'XJVDB', 'Media_reports', 'Researchers', 'Links', 'Links_2', 'Links_3', 'Links_4'
96 | ]
97 |
98 | conn = sqlite3.connect(db_path)
99 | df_csv.to_sql('csv_locations', conn, if_exists='append', index=False)
100 | conn.close()
101 |
102 | # Process and insert JSON files
103 | directory = 'FlightLogExtract'
104 |
105 | for root, dirs, files in os.walk(directory):
106 | for file in files:
107 | if file.endswith('.json'):
108 | json_file_path = os.path.join(root, file)
109 | process_json_file(json_file_path, db_path)
110 |
111 | print("Data from CSV and JSON files has been successfully inserted into the SQLite database.")
112 |
--------------------------------------------------------------------------------
/flight_data.db.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/flight_data.db.zip
--------------------------------------------------------------------------------
/pics/YOU.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/YOU.png
--------------------------------------------------------------------------------
/pics/breakuserbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/breakuserbox.png
--------------------------------------------------------------------------------
/pics/breakuserbox_cn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/breakuserbox_cn.png
--------------------------------------------------------------------------------
/pics/consumers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/consumers.png
--------------------------------------------------------------------------------
/pics/consumers_cn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/consumers_cn.png
--------------------------------------------------------------------------------
/pics/dailyflightstats.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/dailyflightstats.png
--------------------------------------------------------------------------------
/pics/datacollection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/datacollection.png
--------------------------------------------------------------------------------
/pics/earlydays.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/earlydays.png
--------------------------------------------------------------------------------
/pics/earlydays_cn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/earlydays_cn.png
--------------------------------------------------------------------------------
/pics/heatmap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/heatmap.png
--------------------------------------------------------------------------------
/pics/logsearch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/logsearch.png
--------------------------------------------------------------------------------
/pics/machinelearning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/machinelearning.png
--------------------------------------------------------------------------------
/pics/machinelearning_cn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/machinelearning_cn.png
--------------------------------------------------------------------------------
/pics/ministry_of_information_security.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/ministry_of_information_security.png
--------------------------------------------------------------------------------
/pics/ministry_of_information_security_cn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/ministry_of_information_security_cn.png
--------------------------------------------------------------------------------
/pics/userportrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/userportrait.png
--------------------------------------------------------------------------------
/大数据产业发展规划(2016-2020年).doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/大数据产业发展规划(2016-2020年).doc
--------------------------------------------------------------------------------
/大数据产业发展规划(2016-2020年).pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/大数据产业发展规划(2016-2020年).pdf
--------------------------------------------------------------------------------
/数据平台 - Data Platform/admin.wiki/data-platform.md:
--------------------------------------------------------------------------------
1 | # 数据平台相关资料
2 |
3 | [回首页](home)
4 |
5 | + [Web 界面](http://statistical-admin.djiservice.org/djigo)
6 | + [Kibana 视图](http://statistical.active.kibana.djiservice.org/app/kibana)
7 |
8 | ## 登录跳板机
9 |
10 | 可以使用 `ssh-copy-id` 和 `expect` (都需要自行安装)配合写脚本进行自动登录跳转并切换用户。具体原理和教程后面补充
11 |
12 | ## Rsyslog 配置
13 |
14 | ### 转发日志
15 |
16 | DJIService 的配置 `mina pro-hz-dsweb01 run[bash]` 这台机对 log 进行转发,发到 pro-hz-dsweb02 进行转发
17 |
18 | rsyslog 的配置在 `/etc/rsyslog.d` 文件夹中的 `10-file.conf` 中,内容为
19 |
20 | 杭州配置
21 |
22 | ```
23 | $ModLoad imfile
24 | $template myFileMonitorTemplate,"%msg%"
25 |
26 | # File access
27 | #$InputFileName /data/home/service/project/current/log/logstash_production.log
28 | $InputFileName /data/home/service/project/shared/log/logstash_production.log
29 | $InputFileTag dji-log:
30 | # 下面这行是用来保存文件状态的
31 | $InputFileStateFile stat1470781524
32 | $InputFileSeverity info
33 | $InputFileFacility local7
34 | $InputFilePollInterval 1
35 | $InputFilePersistStateInterval 1
36 | $InputRunFileMonitor
37 |
38 | if $syslogtag contains 'dji-log' and $syslogfacility-text == 'local7' then @@192.168.6.26:15228;myFileMonitorTemplate
39 | & stop
40 | ```
41 |
42 | 美国配置
43 |
44 | ```
45 | $ModLoad imfile
46 | $template myFileMonitorTemplate,"%msg%"
47 |
48 | # File access
49 | #$InputFileName /data/home/service/project/current/log/logstash_production.log
50 | $InputFileName /data/home/service/project/shared/log/logstash_production.log
51 | $InputFileTag dji-log:
52 | $InputFileStateFile stat1470812347
53 | $InputFileSeverity info
54 | $InputFileFacility local7
55 | $InputFilePollInterval 1
56 | $InputFilePersistStateInterval 1
57 | $InputRunFileMonitor
58 |
59 | if $syslogtag contains 'dji-log' and $syslogfacility-text == 'local7' then @@10.1.1.57:15228;myFileMonitorTemplate
60 | & stop
61 | ```
62 |
63 | 然后看 `/etc/logrotate.d` 文件夹中的 `_pro-hz-dsweb01` 文件,内容为
64 |
65 | ```
66 | /data/home/service/project/shared/log/*.log {
67 | daily
68 | size 200M
69 | missingok
70 | rotate 52
71 | compress
72 | delaycompress
73 | notifempty
74 | copytruncate
75 | postrotate
76 | (sudo stop rsyslog && sudo sed -i "s/InputFileStateFile.*/InputFileStateFile stat$(date +'%s')/" /etc/rsyslog.d/10-file.conf && sudo start rsyslog 2>&1) || true
77 | endscript
78 | }
79 | ```
80 |
81 | 这里需要注意的在 `postrotate` 部分会把 logrotate 处理完的文件的状态位置保存下来。
82 |
83 | 如果需要把之前的日志导入 es,只需要进入 `/data/home/service/project/current/log` 文件夹,对每个文件进行 cat xxx.log | nc 192.168.6.26:15288 即可
84 |
85 | ### 转发到 ES
86 |
87 | 用来转发的机器也是会利用 rsyslog 转发到 logstash 的端口
88 |
89 | 包括 logstash server 配置
90 |
91 | 然后到 `mina pro-hz-dsweb02 run[bash]`
92 |
93 | 老的日志在 `/data/home/service/project/current/log`,用同样的方法导入
94 |
95 | 修改在 `/etc/logstash/conf.d` 的配置可以更改位置,杭州配置内容为
96 |
97 | ```
98 | # 杭州配置
99 | input {
100 | tcp {
101 | port=> 15228
102 | codec => json_lines
103 | buffer_size => 65536
104 | workers => 8
105 | }
106 | }
107 |
108 | filter {
109 | geoip {
110 | source => "ip"
111 | fields => ["location"]
112 | }
113 | }
114 |
115 | output {
116 | elasticsearch {
117 | hosts => ["http://statistical-es.djiservice.org:80"]
118 | index => "djiservice-log-" + "%{time}"[0,10] # 这里按照时间来写入
119 | user => "x"
120 | password => "x"
121 | }
122 | }
123 | ```
124 |
125 | AWS 配置内容为
126 |
127 | ```
128 | input {
129 | tcp {
130 | port=> 15228
131 | codec => json_lines
132 |
133 | buffer_size => 65536
134 | workers => 8
135 | }
136 | }
137 |
138 | filter {
139 | geoip {
140 | source => "ip"
141 | fields => ["location"]
142 | }
143 | }
144 |
145 | output {
146 | elasticsearch {
147 | hosts => ["http://statistical-es.djiservice.org:80"]
148 | index => "djiservice-log-" + "%{time}"[0,10]
149 | user => "x"
150 | password => "x"
151 | }
152 | }
153 | ```
154 | ## 虚拟机配置
155 |
156 | 先登录跳板机,再进行下列操作
157 |
158 |
159 | ### 杭州 阿里云
160 |
161 | 切换到杭州阿里云服务器 `pro-hz-dsweb02`,这上面有 Logstash 相关配置
162 |
163 | ```bash
164 | # 杭州
165 | mina pro-hz-dsweb02 run[bash]
166 | # 需要进入 Logstash 所在文件夹
167 | cd ../logstash-5.0.0-alpha4
168 | # 运行模板
169 | ./bin/logstash -f file.conf
170 | # 例子:测试导入 hz actived info
171 | ./bin/logstash -f ./confs/hz_actived_info.conf
172 | ```
173 |
174 | 这里有一点需要注意,因为有一段时间杭州和 AWS 的数据库有主从同步,所以需要过滤掉前面一致的记录,具体的间隔段在代码中有,只有第一次导入的时候需要,之后就可以利用记录的值继续,记得修改代码。
175 |
176 | 目前已经把之前的数据导入完成,新的数据请按照服务器上的代码进行导入
177 |
178 |
179 | ### 美国 AWS
180 |
181 | ```bash
182 | # AWS
183 | mina spro-usa-dsweb03 run[bash]
184 | # 需要进入 Logstash 所在文件夹
185 | cd ~/work/logstash-active/
186 | # 例子:导入飞行数据和飞行记录(总览)
187 | bin/logstash -f confs/daily_flights_stats.conf
188 | bin/logstash -f confs/fly_records.conf
189 | ```
190 |
191 | ### Elasticsearch
192 |
193 | 因为 ES 支持 RESTful API,所以我们可以利用 `curl` 命令来进行增删查改(可以把 ES 当面向文档的数据库用)
194 |
195 | ```bash
196 | # 例子:删除飞行记录索引
197 | curl -XDELETE -u logstash:PNIJZJWZ.NaJU 'statistical.active.djiservice.org:80/fly-records'
198 | # 例子:删除激活信息索引
199 | curl -XDELETE -u logstash:PNIJZJWZ.NaJU 'statistical.active.djiservice.org:80/actived-info'
200 |
201 | # 例子:获取飞行记录索引信息
202 | curl -u logstash:PNIJZJWZ.NaJU 'statistical.active.djiservice.org:80/fly-records'
203 | # 例子:获取激活索引信息
204 | curl -u logstash:PNIJZJWZ.NaJU 'statistical.active.djiservice.org:80/actived-info'
205 | ```
206 |
207 | ## Rake 任务
208 |
209 | 目前已迁移到 statistic-server 项目中
210 |
211 | 从 Flurry 和 Google Analysis 导入数据的代码在 `data_center_backend/lib/tasks` 文件夹中,具体导入的命令为
212 |
213 | ```ruby
214 | # 导入 flurry
215 | rake flurry:fetch
216 |
217 | # 导入 google analysis
218 | rake ga:fetch
219 | ```
220 |
221 | ## Logstash 任务
222 |
223 | 无论在杭州还是在 AWS 上的 Logstash 文件夹中,都有 `confs` 文件夹,里面包含具体的 logstash 配置,其中,每次正常运行后,都会把之前的运行记录在类似 `.[usa|hz]_*_*_last_run` 的隐藏文件中,注意不要删除。
224 |
225 | 实在不放心可以用 `cp` 命令进行备份,如 `cp .hz_actived_info_last_run .hz_actived_info_last_run.bak`
226 |
227 | 如果遇到内存不够的情况,考虑去掉 prefetch,并且开启 paging 功能
228 |
229 | ```
230 | jdbc_fetch_size => 100
231 |
232 | jdbc_paging_enabled => true,
233 | jdbc_page_size => 2000,
234 | ```
235 |
236 | daily-app-usages, daily-connected-products, daily-flight-stats, flight-distance-stats, 数据都很少,基本是直接都可以用的统计数据
237 |
238 | ## Kibana 相关
239 |
240 | 在使用 Logstash 把数据导入 Elasticsearch 后,需要在 Kibana 的 Setting 中手动添加对应数据的索引,才能显示出来。
241 |
242 | ## 飞行日志原始数据
243 |
244 | 数据因为历史原因保存在不同地方,具体的时间轴大概如下:
245 |
246 | ```txt
247 | 16年3月 16年6月
248 | |----------------------|-------------|--------------> 时间轴
249 | | 旧 AWS S3 | 阿里 OSS | 阿里 OSS 国内
250 | | (国内外均在) | (国内外均在) | 新 AWS S3 国外
251 | ```
252 |
253 | ### 数据异常问题
254 |
255 | + 固件版本号为00.00.00.00,说明固件需要升级
256 | + OSMO sn非法或为空,表现为 sn:(null), sn:-1-1-1-1-1-1-1-1, 需要返厂
257 | + 例子:邮箱:”ryan500168@gmail.com" 7月20号
258 | + 飞机激活提示非法设备,固件版本号为00.00.00.00,需要升级飞机固件
259 | + 例子: 邮箱: “1073457478@qq.com” 7月20号
260 | + 737207405@qq.com 7月17号
261 | + 437321421@qq.com 7月18号
262 | + 服务器错误,可能是设备取名非法字符导致的
263 | + 例子:”xiaobudian712@163.com"
264 |
265 | ## DJI Service 相关
266 |
267 | ### 日志信息
268 |
269 | 详细内容均在 `dji-service/lib/dji/` 文件下,包含下载与解析日志内容,这部分可以重用,这里只简要记录关键信息
270 |
271 | 飞行记录字段
272 |
273 | + `total_time` 该次飞行总计飞行时间,单位毫秒 ms
274 | + `total_distance` 该次飞行总计距离,单位米 m
275 | + `max_height` 该次飞行最大高度,单位米 m
276 | + `max_horizontal_speed` 该次飞行水平最大速度,单位米每秒 m/s
277 | + `max_vertical_speed` 该次飞行垂直最大速度,单位米每秒 m/s
278 | + `capture_num` 该次飞行拍摄次数,单位次
279 | + `video_time` 该次飞行录像时间,单位秒 s
280 | + `drone_type` 该次飞行无人机类型,具体型号为
281 | + Inspire = 1
282 | + Phantom3C = 2 对应 P3S(具体产品型号)
283 | + Phantom3S = 3 对应 P3A(具体产品型号)
284 | + Phantom3X = 4 对应 P3P(具体产品型号)
285 | + Longan = 5
286 | + N1 = 6
287 | + Phantom4 = 7
288 | + LB2 = 8 飞控
289 | + Inspire1Pro = 9
290 | + `app_version` 该次飞行应用版本
291 |
292 | ### 收集的信息
293 |
294 | 具体可以参见 `app/models` 文件夹
295 |
296 | + 激活信息 Active Info `acitve_info.rb`
297 | + App 信息 App `app.rb`
298 | + 封禁 SN 信息 BanSnInfo `ban_sn_info.rb`
299 | + 电池信息 BatteryInfo `battery_info.rb`
300 | + 校准信息 CalibrationInfo `calibration_info.rb`
301 | + 每日活动 DailyActivation `daily_activation.rb`
302 | + 每日 App 使用 DailyAppUsage `daily_app_usage.rb`
303 | + 每日连接产品 DailyConnectedProduct `daily_connected_product.rb`
304 | + 每日飞行数据 DailyFlightStat `daily_flight_stat.rb`
305 | + 每日固件使用 DailyUsingFirmware `daily_using_firmware.rb`
306 | + 设备信息 Device `device.rb`
307 | + 设备注册日志 DeviceRegisterLog `device_register_log.rb`
308 | + 固件 Firmware `firmware.rb`
309 | + 固件详情 FirmwareDetail `firmware_detail.rb`
310 | + 固件包 FirmwarePack `firmware_pack.rb`
311 | + 固件升级日志 FirmwareUpgradeLog `firmware_upgrade_log.rb`
312 | + 飞行距离数据 FlightDistanceStat `flight_distance_stat.rb`
313 | + 飞行概况 FlightOverview `flight_overview.rb`
314 | + 飞行概况(旧) FlightOverviewOldNotInNew `flight_overview_old_not_in_new.rb`
315 | + 飞行问题 FlightProblem `flight_problem.rb`
316 | + 飞行记录详情 FlightRecordDetail `flight_record_detail.rb`
317 | + 飞行 UUID 概况 FlightUuidOverview `flight_uuid_overview.rb`
318 | + 飞行 UUID 概况(3)FlightUuidOverview3 `flight_uuid_overview3.rb`
319 | + 飞行记录 FlyRecord `fly_record.rb`
320 | + 硬件固件 HardwareFirmware `hardware_firmware.rb`
321 | + 硬件信息 HardwareInfo `hardware_info.rb`
322 | + 信息日志 InfoLogger `info_logger.rb`
323 | + 月飞行数据 MonthFlightStat `month_flight_stat.rb`
324 | + 问卷提交 QuestionaireSubmission `questionaire_submission`
325 | + SN 信息 SnInfo `sn_info.rb`
326 | + 特殊链接 SpecialLink `special_link.rb`
327 | + 特殊链接(改) SpecialLinkModified `special_link_modified.rb`
328 | + 用户 User `user.rb`
329 | + 用户检查 UserCheck `user_check.rb`
330 |
--------------------------------------------------------------------------------
/数据平台 - Data Platform/admin.wiki/home.md:
--------------------------------------------------------------------------------
1 | # 数据平台服务端
2 |
3 | 主要包括为前端提供的接口以及 ELK 平台的搭建及部署。
4 |
5 | + [需求文档](requirement)
6 | + [数据平台基本操作](data-platform)
7 |
8 | ## 160801 会议
9 |
10 | + 把飞行数据导出为 parquet 格式并保存在 S3中(王达)
11 | + 基于 AWS SDK 的 Spark 集群的 Java 管理脚本(王达)
12 | + 找 IT 要发货的历史数据(王达)
13 | + 找海滨申请 Elasticsearch 虚拟机两台(非繁)
14 | + Elasticsearch 环境迁移及集群配置(非繁)
--------------------------------------------------------------------------------
/数据平台 - Data Platform/admin.wiki/requirement.md:
--------------------------------------------------------------------------------
1 | # 需求文档
2 |
3 | [回首页](home)
4 |
5 | ## 需求列表
6 |
7 | ### 数据需求
8 |
9 | + 中日美德四国用户的基本行为统计(飞行时间、飞行次数)
10 | + 热力图数据标准化(算平均,而非总数)
11 | + 从出厂到激活时间统计计算
12 | + 代理商串货行为监测(比如发货到欧洲但第一次激活在美国)
13 | + 飞行数据的挖掘和利用
14 |
15 | ### 日志需求
16 |
17 | logstash + logrotate
18 |
19 | + 对接 DJI Service 的日志
20 | + 对接监管项目的日志
21 |
22 | ### 平台需求
23 |
24 | + AWS 启用 ES 集群,从 1 台扩展为 2 台
25 | + ~~阿里云为监管项目部署一台 ES 做测试~~
26 |
27 | ## 任务列表
28 |
29 | ### 进行中
30 |
31 | + 导出已有的统计数据:daily-app-usages, daily-connected-products, daily-flight-stats, flight-distance-stats,保存到服务器 -> 上传到 S3 保存
32 | + 把飞行数据导出为 parquet 格式并保存在 S3中
33 | + 基于 AWS SDK 的 Spark 集群的 Java 管理脚本
34 | + 找 IT 要发货的历史数据
35 | + 从 S3(US) 和 OSS(CN) 处直接获取完整的飞行日志文件,确定 Bucket 和访问方式,需要对应的 access key 和 access id,具体如何访问看 AWS 和 Aliyun 文档
36 | + ES 的外网访问安全问题
37 | + 了解日志格式和编写读取脚本,考虑写入到 ES 中再进行处理统计
38 |
39 | ### 已排期
40 |
41 | + 检查重复点,导入 Aliyun 飞行记录
42 | + 分布式 ES
43 |
44 | ### 已完成
45 |
46 | + 导入 USA 飞行记录(不再导入到 es 中)
47 | + 导入 USA 激活信息
48 | + 导入 Aliyun 激活信息
49 | + 基本文档整理
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】2016总结与规划.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】2016总结与规划.pptx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】eDM自助取数项目计划书.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】eDM自助取数项目计划书.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】取数引擎项目计划书.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】取数引擎项目计划书.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】安全设计报告(2016.10).docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】安全设计报告(2016.10).docx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】平台迁移项目计划书.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】平台迁移项目计划书.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】应用安全开发规范反馈(2016.12.23).xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】应用安全开发规范反馈(2016.12.23).xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】数据门户项目计划书.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】数据门户项目计划书.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】机器学习项目计划书.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】机器学习项目计划书.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】第三方电商平台数据整合项目计划书.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】第三方电商平台数据整合项目计划书.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/【数据平台】菜单分布图(2017.03).xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】菜单分布图(2017.03).xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/用户画像单项指标分类/activation_count.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/activation_count.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/用户画像单项指标分类/dopms_buy_product_count.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/dopms_buy_product_count.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/用户画像单项指标分类/dopms_order_count.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/dopms_order_count.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_city_count.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_city_count.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_count.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_count.xlsx
--------------------------------------------------------------------------------
/数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_country_count.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_country_count.xlsx
--------------------------------------------------------------------------------
/舆情分析_规划讨论稿 - Public Opinion Analysis/20160918-数据中心体系进度计划-201608版本.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/20160918-数据中心体系进度计划-201608版本.xlsx
--------------------------------------------------------------------------------
/舆情分析_规划讨论稿 - Public Opinion Analysis/dmp 相关数据源及报表服务.xmind:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/dmp 相关数据源及报表服务.xmind
--------------------------------------------------------------------------------
/舆情分析_规划讨论稿 - Public Opinion Analysis/会员营销规划v0.5_20160612.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/会员营销规划v0.5_20160612.pptx
--------------------------------------------------------------------------------
/舆情分析_规划讨论稿 - Public Opinion Analysis/全球代理IP库[测试部分].xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/全球代理IP库[测试部分].xlsx
--------------------------------------------------------------------------------
/舆情分析_规划讨论稿 - Public Opinion Analysis/大疆舆情体系v0.5.xmind:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/大疆舆情体系v0.5.xmind
--------------------------------------------------------------------------------
/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情.xmind:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情.xmind
--------------------------------------------------------------------------------
/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情分析_规划讨论稿v1.0.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情分析_规划讨论稿v1.0.pptx
--------------------------------------------------------------------------------
/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情分析_项目计划v1.0.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情分析_项目计划v1.0.xlsx
--------------------------------------------------------------------------------
/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情项目计划v1.0.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情项目计划v1.0.xlsx
--------------------------------------------------------------------------------