大数据分析技术

陈清华、田启明、施郁文等

目录

  • 课程简介
    • ● 课程简介
  • 环境准备
    • ● Anaconda环境安装与使用
    • ● Pycharm环境安装
    • ● 常用第三方包的安装与配置
  • 项目一 电影数据统计
    • ● 任务简介
    • ● 数据获取
    • ● 数据解析
    • ● 数据分析
    • ● 数据可视化
    • ● 课堂思政:新型冠状病毒疫情分析与可视化
    • ● 课堂思政:中国工匠精神
  • 项目二 电影数据分析(回归)
    • ● 任务简介
    • ● 使用一元线性回归分析电影票房数据
    • ● 使用多项式回归分析电影票房数据
    • ● 使用多元线性回归分析电影票房数据
    • ● 课堂实训:工资分析
  • 项目三 爬取房产租赁数据
    • ● 任务简介
    • ● 电影数据爬取
    • ● 房产租赁数据爬取
    • ● 房产租赁数据统计
    • ● 课后实训:二手房数据爬取
    • ● 课堂思政:疫情数据的爬取与可视化
  • 项目四 房屋租赁数据分析与可视化
    • ● 任务简介
    • ● 使用箱形图展现租赁价格分布特征
    • ● 使用散点图展现房屋面积与租赁价格的关系
    • ● 使用饼图展现不同行政区域的可租赁房源占比
    • ● 使用折线图可视化房间数与租赁价格的关系
    • ● 使用热力图展现地理位置的影响
    • ● 课后实训:二手房数据分析
    • ● 课堂思政:疫情数据分析与可视化
  • 项目五 身高与体重数据分析(分类器)
    • ● 使用身高、体重数据进行性别分类
      • ● 使用逻辑回归进行性别分类
      • ● 使用朴素贝叶斯进行性别分类
      • ● 使用决策树模型进行性别分类
      • ● 使用支持向量机进行性别分类
    • ● 使用支持向量机进行肥胖程度分类
    • ● 课后实训: 身高体重数据分析(分类器)
  • 项目六 鸢尾花分类
    • ● 任务简介
    • ● 使用K近邻对鸢尾花进行分类
    • ● 使用随机森林对鸢尾花进行分类
    • ● 使用神经网络对鸢尾花进行分类
  • 项目七 电影评分数据分析(聚类)
    • ● 任务简介
    • ● 使用BDSCAN确定质心个数
    • ● 使用K-Means对观影用户进行聚类
  • 项目八 人脸检测与人脸识别
    • ● 任务简介
    • ● 图像中的人脸检测
    • ● 视频中的人脸检测
    • ● 图像中的人脸识别
    • ● 视频中的人脸识别
    • ● 课后实训:眼睛与笑脸检测
    • ● 课堂思政:人工智能与弯道超车
  • 项目九 手写数字识别应用
    • ● 任务简介
    • ● 图像数据集准备
    • ● 使支持向量机识别手写数字
    • ● 使用神经网络识别手写数字
    • ● 课后实训:使用不同的机器学习方法识别数字手写体
  • 项目十  深度学习在行为识别中的应用
    • ● 任务简介
    • ● 使用卷积神经网络识别行为
    • ● 使用循环神经网络识别行为
    • ● 课后实训:电影评论数据分析
  • 项目十一 TensorFlow与神经网络
    • ● 任务简介
    • ● 使用单层神经网络预测花瓣宽度
    • ● 设计多层神经网络实现鸢尾花分类
    • ● 课后实训:卷积神经网络的实现与应用
  • 项目综合实训(17级学生案例)
    • ● 综合实训要求
    • ● 确定数据采集目标
    • ● 数据采集与预处理
    • ● 数据统计与分析
    • ● 数据分析与预测
    • ● 数据分类应用
    • ● 17级实训案例:二手车数据获取与市场分析
使用热力图展现地理位置的影响

什么是热力图

在热力图(heatmap)以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示。现通常用于显示事发热点的区域。比如:实现展示地区人口密度,其关键是坐标信息的获取。

任务简介

日常工作中,经常可以见到各式各样精美的热力图,热力图的应用非常广泛。利用热力图可以看数据表里多个特征的两两相似度。在本项目中,为进一步挖掘地理位置对租赁价格的影响,引入百度地图工具,对价格进行深入分析。为使用百度的接口获取地理位置对应的经纬度,需要注册百度开发者,申请密钥,编写根据房屋具体地址通过百度地图获取其经纬度的模块。


任务5.1:使用百度地图API获取地址对应的经纬度。

  • 步骤一:申请AK,获得访问许可。

       登陆百度地图开放平台http://lbsyun.baidu.com/apiconsole/key注册用户,并创建服务器应用类型的AK。生成并获得相应的AK。如下图所示

                             

  • 步骤二:编写代码,调用接口获取地址对应的经纬度。参考代码如下:

 

# 应用百度地图API获取各个房屋的经纬度信息
 
class  Html(object):
     soup =
None
     def
__init__(self, address):
         url0 =
'http://api.map.baidu.com/geocoder/v2/?address='
        
ak = '使用自己申请的AK填入'
        
self.address = address
         city =
'温州市'
        
baiduAPI_url = url0 + address  + '&city='  +  city + '&output=json&pois=1&ak=' + ak
         html = requests.get(
baiduAPI_url).text  # 获取查询页的html
        
self.soup = BeautifulSoup(html, features="html.parser"# 得到soup对象
    
def get_location(self):
         result =
self.soup.get_text()
        
print result
        
try:
             st1 = result.find(
'"lng":')
             end1 = result.find(
'"lat":')
            
lng = float(result[st1+6:end1-1])
           
# print lng
            
end2 = result.find(',"precise"')
             lat =
float(result[end1+6:end2-1])
            
#print lat
 
        
except BaseException:
            
return 0, 0
        
else:
            
return lng, lat
 
 address = house[
'area']
 price = house[
'price']
 
#  创建列表coord,用来存储房屋的坐标(经纬度)
 
coord = []
 
#  循环遍历每个房屋的具体地址,通过百度地图API获取其经纬度,并存入coord列表
 
for  addrin address:
    
#print addr
    
loc = Html(addr).get_location()
     coordinate =
str(loc).strip('()')
    
coord.append(coordinate)
 
 
coord_column = pd.Series(coord, name='coord')
 save = pd.
DataFrame({'coord': coord_column})
 save.to_csv(
"coord.csv", encoding="gbk", columns=['coord'], header=True, index=False)
 
 
for  i  in  range(len(house)):
    
lng = str(coord_column[i].split(', ')[0])
     lat = str(
coord_column[i].split(', ')[1])
     count = str(price[i])
     out =
'{\"lng\":' + lng + ',\"lat\":' + lat + ',\"count\":' + count + '},'
    
print(out)

 

获取的经纬度输出结果,部分如图所示。


  • 步骤三:使用百度地图开放平台中的代码编辑器ttp://lbsyun.baidu.com/jsdemo.htm#c1_15展示热力图。

首先,我们需要再创建一个AK,应用类型为浏览器。

 <script  type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=***********"></script>

其次,设置中心位置点和地图的初始绽放缩放大小。

 

      var map = new BMap.Map("container");          // 创建地图实例
      var point = new BMap.Point(120.65029680539033,  27.964613394067255);
      map.centerAndZoom(point,13.5);             // 初始化地图,设置中心点坐标和地图级别

最后,将上述获取的所有经纬度信息粘贴到points中。

 var points  =[{"lng":120.65029680539033,"lat":28.017170429729519,"count":800},
 {"lng":120.65675472819095,"lat":28.003560697418448,"count":550},
 {"lng":120.69157588750697,"lat":27.989555139505119,"count":1280},]

登陆网站http://lbsyun.baidu.com/jsdemo.htm#c1_15,粘贴对应用的HTML代码源代码编辑器中,可运行得到相应的结果。


地图中热力图点的尺寸、透明度和梯度的信息可自定义设置。在浏览器中可以拖拽和缩放地图。在不同放大倍率下可以设定合适的热力图点参数。图的放大倍率和热力图点尺寸都不一样,方便更好地展示数据。

  • 步骤四:借助第三方库包实现热力图。



安装folium库,并撰写代码:

 

#coding:utf-8
 
import  pandas  as  pd
 
from  folium.pluginsimport HeatMap
 
import  folium
 house = pd.read_csv(
'result.csv', encoding='gbk')
 
coord_column = pd.read_csv('coord.csv', encoding='gbk')
 address = house[
'area']
 price = house[
'price']
 
dict=[]
 
for  i  in  range(len(house)):
    
lng = coord_column.coord[i].split(', ')[0]
     lat =
coord_column.coord[i].split(', ')[1]
     count = price[i]
    
dict.append([float(lat),float(lng),float(count)])
 
 m = folium.Map([
27.964613394067255,120.65029680539033],tiles='stamentoner', zoom_start=13.5)
 
HeatMap(dict).add_to(m)
 m.save(
'Heatmap.html')#存放路径

 
  • 步骤五:运行程序.