上海地铁数据可视化

该博客详细介绍了上海地铁数据的处理过程,包括地铁站经纬度、交通卡交易数据、异常值处理、进/出站数据等。通过数据清洗和分析,创建了地铁站进站和出站的人流量统计,并利用chord图进行展示。最终,博主通过ShinyApp部署了交互式可视化应用,以直观展示地铁流量情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已部署到shinyapps.io,详见SHMetro

0.配置环境和加载包

## encoding
options(encoding = "UTF-8")      ## for chines
## use getOption("encoding") to see if things were changed

loc <- function(os, language = "english") {
  switch(language,
         english = ifelse(os == "Windows", "English_United States.1252", "en_US.UTF-8"),
         chinese = ifelse(os == "Windows", "Chinese", "zh_CN.utf-8"))
}
## set locale
Sys.setlocale(category = "LC_ALL", loc(Sys.info()[["sysname"]], "chinese"))

##加载工作环境和所需包
setwd("/Users/jeevanyue/Rproject/map/SHMetro")
library(data.table)
library(bit64)
library(dplyr)
library(tidyr)
library(scales)
library(lubridate)  #日期处理包
library(shiny)
library(leaflet)
library(lattice)
library(plotly)
library(chorddiag)  #绘制chord

1. 地铁数据

#地铁站进站数据和出站数据
shmetro_in <- fread("data/shmetro_in.csv",encoding="UTF-8")
shmetro_out <- fread("data/shmetro_out.csv",encoding="UTF-8")

## 进出地铁站数据
shmetro_line_in_out <- fread("data/shmetro_line_in_out.csv",encoding="UTF-8")

## 进出地铁站关联
in_out <- shmetro_line_in_out %>%
  spread(line_out,count)
in_out[is.na(in_out)]<-0

## 地铁站经纬度
stations <- fread("data/stations.csv",encoding="UTF-8")
stations <- stations %>% 
  select(c(1:5)) %>%
  arrange(line,line_id)
stations_no <- nrow(stations)
for (i in 1:stations_no) {
    s <- stations$station[i]
    stations$lines[i] <- paste(stations[stations$station==s,]$line,sep="",collapse="/")
}

1.1 地铁站经纬度

stations <- fread("data/stations.csv",encoding="UTF-8")
stations <- stations %>% 
  select(c(1:5)) %>%
  arrange(line,line_id)

stations_no <- nrow(stations)
for (i in 1:stations_no) {
    s <- stations$station[i]
    stations$lines[i] <- paste(stations[stations$station==s,]$line,sep="",collapse="/")
}
invisible(gc())

1.2 交通卡交易数据

交通卡的交易信息有7个字段,分别是:卡号、交易日期、交易时间、站点名称、行业名称、交易金额、交易性质。

  • 卡号:交通卡卡号

  • 交易日期:日期格式yyyy-mm-dd

  • 交易时间:时间个是hh:mm:ss

  • 站点名称:内容包括线路和站名,如:"1号线莘庄"

  • 行业名称:都是"地铁"

  • 交易金额:0和大于0的值,0表示进站,大于0的值表示出战

  • 交易性质:"优惠"和"非优惠"

#mac下用如下读取
system.time(trade <- read.csv("/Users/jeevanyue/Desktop/SPTCC-20150401.csv",header = F,sep=",", fileEncoding = "GB2312"))
#windows下用如下读取
#system.time(trade <- fread("SPTCC-20150401/SPTCC-20150401.csv",integer64='character',stringsAsFactors=F))
#trade <- read.csv('data/SPTCC-20150401_Sample.txt',header=T,encoding='UTF-8',stringsAsFactors = F)

#重命名
names(trade) <- c('card_id','date','time','station','vehicle','money','property')
#筛选地铁数据
trade_metro <- trade %>%
  filter(vehicle=='地铁')
rm(trade)
invisible(gc())

#将"station"(原含义为线路和站名),分为"line"和"station"
trade_metro <- trade_metro %>% 
  separate(station, c('line', 'station'), sep = '号线')
invisible(gc())

#按五分钟统计时间,向上取整
trade_metro <- trade_metro %>%
  mutate(M5=ceiling(period_to_seconds(hms(time))/300))
invisible(gc())

#删除不需要的字段
trade_metro <- trade_metro %>%
  select(-vehicle,-property,-date)
invisible(gc())

#时间格式
#trade_metro$time <-  strptime(paste("2015-04-01", trade_metro$time, sep=' '), "%Y-%m-%d %H:%M:%S", tz = "GMT")

1.3 处理异常值

## 对与stations地铁站名不一致的trade数据进行处理
trade_metro[trade_metro$station=="淞浜路",]$station <- "淞滨路"
trade_metro[trade_metro$station=="大木桥路 ",]$station <- "大木桥路"
trade_metro[trade_metro$station=="上海大学站",]$station <- "上海大学"

1.4 进/出站数据

## 进站数据
trade_metro_in <- trade_metro %>%
  filter(money==0) %>%
  select(card_id,"time_in"=time,"line_in"=line,"station_in"=station,"M5_in"=M5)
## 出站数据
trade_metro_out <- trade_metro %>%
  filter(money>0)%>%
  select(card_id,"time_out"=time,"line_out"=line,"station_out"=station,money,"M5_out"=M5)

1.5 虚拟换乘

上海火车站为虚拟换乘,删除半小时内3/4换1和1换3/4的数据

3/4换1的数据

## 3/4换1的数据,统计发现在上海火车站3/4号线出站以3号线名义出站
trade_metro_out_34 <- trade_metro_out %>%
  filter(station_out=='上海火车站') %>%
  filter(line_out==3 | line_out==4)
trade_metro_in_1 <- trade_metro_in %>%
  filter(station_in=='上海火车站', line_in==1)

## merge出站和进站的
### Python 地铁数据处理与可视化的库及教程 在进行地铁数据的处理与可视化时,Python 提供了多种强大的库和工具。以下是几个常用的库及其功能介绍: #### 1. 数据获取与处理 - **Requests**:用于从网络上爬取地铁线路、站点等信息。通过发送HTTP请求获取网页内容,并解析出所需的数据[^1]。 - **Pandas**:是数据处理的核心库,能够高效地处理大规模结构化数据。例如,可以将地铁线路信息存储为DataFrame格式,便于后续分析[^3]。 - **Numpy**:提供高效的数值计算能力,适用于对地铁数据中的数值型字段进行操作。 ```python import requests import pandas as pd import numpy as np # 示例:从API获取地铁数据 url = "https://example.com/metro_data" response = requests.get(url) data = response.json() # 转换为DataFrame df = pd.DataFrame(data) print(df.head()) ``` #### 2. 数据可视化 - **Matplotlib**:基础的绘图库,适合绘制简单的图表,如折线图、柱状图等。可用于展示地铁线路长度、站点数量等基本信息[^2]。 - **Seaborn**:基于Matplotlib的高级统计图表库,提供更美观的默认样式和更复杂的图表类型。 - **Pyecharts**:专注于生成交互式图表,特别适合制作动态的地铁线路分布图或客流热力图[^1]。 ```python from pyecharts.charts import Map from pyecharts import options as opts # 示例:绘制地铁线路分布图 metro_data = [("北京", 600), ("上海", 700), ("广州", 500)] map_chart = ( Map() .add("地铁线路长度(公里)", metro_data, "china") .set_global_opts(title_opts=opts.TitleOpts(title="中国主要城市地铁线路长度")) ) map_chart.render_notebook() ``` #### 3. 空间数据可视化 - **GeoPandas**:扩展了Pandas的功能,支持地理空间数据的操作。结合地铁站点的经纬度信息,可以绘制精确的地图[^3]。 - **TransBigData**:专为空间数据分析设计的库,能够轻松实现轨迹数据的可视化。 ```python import geopandas as gpd # 示例:读取地铁站点的地理信息 gdf = gpd.read_file("metro_stations.shp") gdf.plot() ``` #### 4. Web应用开发 如果希望将地铁数据可视化结果部署到Web端,可以使用Flask框架。它轻量且易于集成各种Python库[^4]。 ```python from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') if __name__ == '__main__': app.run(debug=True) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值