一、目的:
导入重庆出租车数据,为交通大数据与百度可视化准备
二、内容:
1. 将提供的出租车GPS数据导入Mysql数据库,以下为出租车GPS数据字段说明。
本部分实验的内容包括:
(1)在mysql数据库中新建出租车数据表,注意:数据表的索引的建立。
(2)编写python程序,读取txt文件,并将与编号相对应的GPS数据写入数据表中。
2. 申请百度地图APK,并且在实验报告中附上所申请百度地图apk的截图。
百度地图开放平台网站:https://lbsyun.baidu.com
三、步骤
1. 将出租车GPS数据导入Mysql数据库
(1)创建出租车数据表
先创建traffic数据库
CREATE DATABASE traffic_data;
再创建traffic_data数据表,由于没有主键,定义一个自增的序号作为主键,并且字段“GPS_Type”为1,因此为了节约空间以及存入时间,忽略这个字段,用SQL语言创建表:
use traffic_data;
CREATE TABLE `traffic_data` (
`GPS_ID` int AUTO_INCREMENT,
`DATE` date ,
`TIME` time ,
`ID` varchar(15) ,
`LONGTITUDE` DECIMAL(9, 6) ,
`LATITUDE` DECIMAL(8, 6) ,
`SPEED` float,
`ALTITUDE` int ,
`PASSENGER` bit(1),
PRIMARY KEY (`GPS_ID`)
);
数据结构表字段说明:
(2)将数据写入到数据表中
筛选出第4列末尾字符为3或7的行,写入到SQL数据库的traffic_data库中的traffic_data表中。代码:
import pandas as pd
import os
from sqlalchemy import create_engine
class FliterData:
def __init__(self, folder_addr="E:\\学习资料及作业\\3.2大三下\\3.交通大数据处理与分析\\01"):
self.folder_addr = folder_addr
def fliter_as(self, *args):
self.names = ['DATE', 'TIME', 'ID1', 'ID', 'LONGTITUDE', 'LATITUDE', 'SPEED', 'ALTITUDE', 'PASSENGER',
'GPS_Type']
count = 0
# 创建一个错误数据df存错误数据
self.error_df = pd.DataFrame(columns=self.names)
self.error_df.drop('ID1', axis=1, inplace=True)
self.error_df.drop('GPS_Type', axis=1, inplace=True)
# 遍历文件夹
for filename in os.listdir(self.folder_addr):
file_path = os.path.join(self.folder_addr, filename)
if os.path.isfile(file_path):
# 创建一个空df保存结果
self.df1 = pd.DataFrame(columns=self.names)
self.df1.drop('ID1', axis=1, inplace=True)
self.df1.drop('GPS_Type', axis=1, inplace=True)
# 读取
self.df = pd.read_csv(file_path, sep=',', names=self.names, encoding='GBK', converters={'TIME': str})
# 删除名为'ID1'的列
# axis=1参数表示操作的是列而不是行,inplace=True参数表示直接在原始DataFrame上进行修改,而不是创建一个新的DataFrame。
self.df.drop('ID1', axis=1, inplace=True)
self.df.drop('GPS_Type', axis=1, inplace=True)
len1 = len(args)
for i in range(len1):
mask = self.df['ID'].str.endswith(args[i])
# 使用布尔索引留下以args[i]结尾的行
self.df1 = pd.concat([self.df1, self.df[mask]], ignore_index=True)
# 存入数据库,创建数据库引擎
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/traffic_data')
self.df1.to_sql('traffic_data', con=engine, if_exists='append', index=False)
print("{}载入数据库成功!".format(filename))
if __name__ == "__main__":
fliter = FliterData()
df = fliter.fliter_as('3', '7')
每写入一个txt文件都会出现一条txt数据载入成功的提示:
数据导入后,部分展示结果:
共27291532条记录数据
2. 申请百度地图APK
(1)首先进入百度地图官网“百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com)”,然后注册申请。
(2)申请浏览器端,申请成功