파이썬 데이터 분석 - 사람들의 항주 지하철 역 흐름 [데이터 소스 - 알리 구름 천지 루키]
서문
천지 새로운 전투 게임 상세 소개 자습서를 제공, 학습 시나리오와 같은 고전적인 타이틀 매치에 데이터를 새로운 특수 전투 훈련을 위해 설정하는 방법 데이터 마이닝을 학습하는 방법을 배운다. 신인 천지가 높은 학생들이 더 많은 데이터 기술을 마스터하기 위해 데이터 실용적인 교육 과정을 선전 대학이 될 수 있도록 노력하겠습니다. 시는 AI 도전 과제에 대한 "지하철 승객 흐름 예측"을 계산하기 위해, 참가자는 주최자 지하철 군중에 의해 제공되는 데이터를 기반으로합니다, 그리고 여행 법률 뒤에 숨겨진 탭 정확하게 다양한 지하철의 흐름에서 미래의 변화를 예측.
데이터 다운로드 :
# 여기에 다음 다운로드 링크를 클릭하여 사진을 보여주는 데이터입니다 :
https://tianchi.aliyun.com/home/ #이, 재미있는 게임을 많이 알리 천지의 클라우드 플랫폼이있다, 우리가 경험하는 시간이
# 홈
#이 자신을 등록하지 않을 경우, 이것은 내가 게임에 참석 보여줍니다 내 개인 중심의 인터페이스이며, 알리 클라우드 계정 로그인을 사용할 필요가, 그냥 가서하는 항목을 클릭 :
이 컬럼의 데이터와 타이틀 매치에 # 클릭
#을 누른 다음 표시 다운로드 가능한 데이터
당신에게 게임 데이터 다운로드 과정을 이야기하려면 링크 알리 클라우드 플랫폼 천지 알리 클라우드 계정 로그인을 클릭 ---------- ---------- --------- 인종 - ----------- 데이터 마이닝 투어를 다운로드를 시작
大赛以“地铁乘客流量预测”为赛题,参赛者可通过分析地铁站的历史刷卡数据,预测站点未来的客流量变化,帮助实现更合理的出行路线选择,规避交通堵塞,提前部署站点安保措施等,最终实现用大数据和人工智能等技术助力未来城市安全出行。
大赛开放了20190101至20190125共25天地铁刷卡数据记录,共涉及3条线路81个地铁站约7000万条数据作为训练数据(Metro_train.zip),供选手搭建地铁站点乘客流量预测模型。训练数据(Metro_train.zip)解压后可以得到25个csv文件,每天的刷卡数据均单独存在一个csv文件中,以record为前缀。如2019年1月1日的所有线路所有站点的刷卡数据记录存储在record_2019-01-01.csv文件中,以此类推。同时大赛提供了路网地图,即各地铁站之间的连接关系表,存储在文件Metro_roadMap.csv文件中供选手使用。
测试阶段,大赛将提供某天所有线路所有站点的刷卡数据记录,选手需预测未来一天00时至24时以10分钟为单位各时段各站点的进站和出站人次。
为帮助选手测试算法性能的鲁棒性,本次新人赛一共开放了A、B、C三个赛道:
A赛道:提供2019年1月28日的刷卡数据(testA_record_2019-01-28.csv),需对2019年1月29日全天各地铁站以10分钟为单位的人流量进行预测。
B赛道:提供2019年1月26日的刷卡数据(testB_record_2019-01-26.csv),需对2019年1月27日全天各地铁站以10分钟为单位的人流量进行预测。
C赛道:提供2019年1月30日的刷卡数据(testC_record_2019-01-30.csv),需对2019年1月31日全天各地铁站以10分钟为单位的人流量进行预测。
竞赛数据表结构
如图:
步骤一:数据预处理
(一)数据清洗:
数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。
数据清洗(Data cleaning)– 对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。
数据清洗从名字上也看的出就是把“脏”的“洗掉”,指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。因为数据仓库中的数据是面向某一主题的数据的集合,这些数据从多个业务系统中抽取而来而且包含历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,这些错误的或有冲突的数据显然是我们不想要的,称为“脏数据”。我们要按照一定的规则把“脏数据”“洗掉”,这就是数据清洗。而数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。数据清洗是与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成 。
-------百度百科
数据清洗是一项复杂且繁琐的工作,同时也是整个数据分析过程中最为重要的环节。
空值和缺失值的处理
#使用isnull()和notnull()函数都能判断数据集中是否存在空值和缺失值
#查看是否存在空值和缺失值,使用isnull()
#这里只以杭州地铁站1月3日三条线路所有站点的刷卡数据记录为例
代码:
如图:
全为false,说明没有一个空值或缺失值,说明天池挑战赛提供的数据很干净
#查看是否存在空值和缺失值,使用notnull()
代码:
如图:
#全为true,说明没有一个空值或缺失值,说明天池挑战赛提供的数据很干净
#如果出现缺失值的话,可以使用dropna()和fillna()方法对缺失值进行填充,不过这里用不到
重复值的处理
#数据中出现了重复值,大多数情况下需要进行删除,拿这次的杭州市乘客地铁刷卡记录来说,它的时间点是唯一的,不可能同一个乘客在相同的时间点【如2019/01/11 01:11】有两条甚至是三条相同的记录出现,他搭一次车是不可能出现多条记录的,除非记录系统出现漏洞,当然重复是指每一项的数值都相同,所以这次数据清洗要是出现重复的话,就要处理重复值了
#Pandas提供duplicated()和drop_duplicated()方法处理重复值
duplicated()用来标记是否有重复值,drop_duplicated()用于删除重复值
#查看是否有重复值
代码:
如图:
所有的标记都显示为false。说明没有重复值,不需要再处理,提供的数据没有问题,记录系统没有出错
异常值的处理
#异常值是指样本中的个别值,其数值明显偏离它所属样本的其余观测值,这些数值是不合理的或错误的,需要进行处理
#检查一组数据中是否有异常值,常用3Q原则和箱型图
#3Q原则是基于正态分布的数据监测【数据要满足正态分布】,这里不做详细介绍,箱型图没有严格的要求,可以检测任意一组数据,下面用箱型图进行处理
箱型图介绍
开始检测异常值
代码:
如图:
从绘制出的箱型图可以看出没有没有出现离散点,说明这次大赛提供的数据很规范干净,没有出现异常值 #这里我们需要分组显示箱形图,比如数据中有的来自1号站点、有的来自于2号站点,有的来自3号站点
以stationID进行分组,然后绘制箱形图
代码:
如图:
#这个结果有些看不懂,可能是分组项选的不太合适
这里我们也需要分组显示箱形图,比如数据中有的来自A线路、有的来自于B线路,有的来自C线路 #以lineID进行分组,然后绘制箱形图
代码:
如图:
从上面箱型图可以看出deviceID这一列的所有数据没有离散点,其他三列绘出的图看不出什么,但也没有离散点,也说明数据很干净
异常值的处理【由于前面的操作没有出现异常值,这里只作介绍】
更改数据类型
比赛提供的数据的类型很规范,这里不做转换,了解就好
(二)数据合并【轴向.关键值】
#轴向堆叠数据
concat函数是在pandas底下的方法,可以将数据根据不同的轴作简单的融合
开始轴向堆叠数据
#读取1月3号到1月5号这三天的表数据
#相同字段的表首尾相接,开始合并三张表
#代码:
如图:
主键合并数据
由于提供的所有表的字段值都相等,主键都相同,没有合并的必要,只介绍一下
(三)数据重塑
重塑层次化索引
#我觉得这样做意义不大,就介绍一下
(四)数据转换
离散化连续数据
#这里只作简单介绍
步骤二:数据聚合与分组计算
分组与聚合的原理
Pandas通过groupby()方法将数据拆分成组
数据读取:
开始读取杭州地铁站三条线路所有站点的刷卡数据记录【1月1日到1月25日】
杭州地铁站1月1日三条线路所有站点的刷卡数据记录
程序:
import pandas as pd
import numpy as np
#读取杭州地铁站三条线路所有站点的刷卡数据记录【1月1日到1月25日】
#读取杭州地铁站1月1日三条线路所有站点的刷卡数据记录
file_path = open(‘C:/Users/任重文/Downloads/阿里云学习资料/天池挑战赛数据-预测地铁站人流量/Metro_train/record_2019-01-01.csv’)
file_data = pd.read_csv(file_path)
file_data
如图:
从读取到的数据可以看出,刷卡数据记录包括刷卡时间,乘客所在线路,搭车站点,刷卡设备号,刷卡状态【有或没有刷卡】,客户ID【一列字符串】,支付类型【有三种】
#杭州地铁站1月2日三条线路所有站点的刷卡数据记录
import pandas as pd
import numpy as np
读取杭州地铁站1月2日三条线路所有站点的刷卡数据记录
file_path = open(‘C:/Users/任重文/Downloads/阿里云学习资料/天池挑战赛数据-预测地铁站人流量/Metro_train/record_2019-01-02.csv’)
file_data = pd.read_csv(file_path)
file_data
如图:
#杭州地铁站1月3日三条线路所有站点的刷卡数据记录
import pandas as pd
import numpy as np
#读取杭州地铁站1月3日三条线路所有站点的刷卡数据记录
file_path = open(‘C:/Users/任重文/Downloads/阿里云学习资料/天池挑战赛数据-预测地铁站人流量/Metro_train/record_2019-01-03.csv’)
file_data = pd.read_csv(file_path)
file_data
如图:
照这个模式可以读出剩下22天三条线路所有站点的刷卡数据
#由于这次的数据量太大,个人数据分析能力低下,只以1月3日的数据为例
开始数据分组
读取lineID这一列,只取唯一值
代码:
import pandas as pd
import numpy as np
file_path = open(‘C:/Users/任重文/Downloads/阿里云学习资料/天池挑战赛数据-预测地铁站人流量/Metro_train/record_2019-01-03.csv’)
file_data = pd.read_csv(file_path)
#创建一个DataFrame对象,该对象只有一列列数据:lineID[线路ID]
new_df = pd.DataFrame({‘lineID’:file_data[‘lineID’].unique()})
new_df
如图:
通过读取lineID一列的唯一值可以看出有三条地铁线路
这里读取的时候和数据库读表有些类似,也可以根据要求读表,也可以将记录分组,排序等等
按lineID这一列将数据进行分组,并统计每个分组的数量
代码:
import math
import pandas as pd
import numpy as np
file_path = open(‘C:/Users/任重文/Downloads/阿里云学习资料/天池挑战赛数据-预测地铁站人流量/Metro_train/record_2019-01-03.csv’)
file_data = pd.read_csv(file_path)
#按“lineID”列将file_data进行分组,并统计每个分组的数量
groupy_area = file_data.groupby(by=‘lineID’).count()
groupy_area
如图:
按“userID”一列从大到小排列
代码:
import math
import pandas as pd
import numpy as np
file_path = open(‘C:/Users/任重文/Downloads/阿里云学习资料/天池挑战赛数据-预测地铁站人流量/Metro_train/record_2019-01-03.csv’)
file_data = pd.read_csv(file_path)
#按“lineID”列将file_data进行分组,并统计每个分组的数量
groupy_area = file_data.groupby(by=‘lineID’).count()
groupy_area
#按“userID”一列从大到小排列
groupy_area.sort_values(by=[‘userID’], ascending=False)
如图:
#可以从图表中看出,B站点的人流量最大,A站点最小,B站点越容易发生人流拥堵问题
按stationID这一列将数据进行分组,并统计每个分组的数量
代码:
如图:
按“userID”一列从大到小排列
代码:
如图:
#从上图数据可以看出,15号站点人流量最大,容易发生交通人流拥堵问题,74号站点人流量最少
按deviceID这一列将数据进行分组,并统计每个分组的数量
代码:
如图:
按“userID”一列从大到小排列
代码:
如图:
#可以看出,474号设备的刷卡数最多,3130号设备的刷卡数最少
数据聚合
开始聚合,按照lineID分组,求每个分组的平均值
代码:
如图:
#开始聚合,按照stationID分组,求每个分组的平均值
代码:
如图:
开始聚合,按照deviceID分组,求每个分组的平均值
代码:
如图:
开始聚合,按照lineID分组,求每个分组的最大,最小值
代码:
如图:
代码:
如图:
步骤三:数据可视化
数据可视化概述:
Matplotlib—绘图制表
用hist()函数绘制直方图
代码:
如图:
绘制散点图
代码:
如图:
绘制带有核密度估计曲线的直方图
代码:
如图:
通过jointplot()函数创建多面板图形
代码:
如图:
绘制二维直方图
代码:
如图:
绘制核密度估计图形
代码:
如图:
出现的问题及总结:
问题一:数据读取–杭州地铁站1月1日三条线路所有站点的刷卡数据记录时出现问题,如图:
解决方案:csdn查找,发现是写文件路径的时候不规范,直接从电脑上打开文件的地方复制的地址占到程序里是错误的
正确的文件路径应该是这样的,举例:
window 读取文件可以用\,但是在字符串中\是被当作转义字符来使用,所以’d:\a.txt’会被转义成’d:\a.txt’这是正确路径,所以不会报错。而‘C:\Users\FrankYuan\Pictures\Camera Roll\WIN_20161010_08_51_57_Pro.jpg ’中经过转义之后可能就找不到路径的资源了,例如\t可能就转义成tab键了。
# '\ XXX \ XXX \ XX ' 잘못, 그것이 있어야 '/ XXX / XXX / XXX' , 성공적으로 실행 그림과 같이 완료 한 후 변화 :
두 번째 문제 :도 상자 오류가 비정상 데이터 값이있는 경우 발생 그릴 참조 그림 :
솔루션 : 인터넷 검색, 아니 참조 matplotlib.pyplot 모듈, 관련 문, 전면에 그리기 다시 쓰기뿐만 아니라 드로잉 보드이 단계, 올바른 동작을 구성하지 않은 발견과 성공 표시와 같이
솔루션 :
문제 세 : 그림과 같이) 오류 함수는 히스토그램 HIST을 (립니다 있었다
해결책 : 코드를 확인하고 같이 그의 HIST이 쓰여, 다시 실행, 성공적인 구현 :