Educator头歌:地铁刷卡数据分析在线实验闯关
·
第1关:大数据文件分块读取技术、二分法查找
def find_index(A,a0,a2):
tA=A
while 1:
I1=int(len(tA)/2)-1
I2=I1+1
t0=int(tA.iloc[I1,0][8:10])
t2=int(tA.iloc[I2,0][8:10])
if t2!=t0:
r=(tA.iloc[I1,0],tA.index[I1])
return r
break
if t2==t0 and t2==a0:
tA=tA.iloc[I2:,:]
if t2==t0 and t2==a2:
tA=tA.iloc[:I1+1,:]
def return_values():
import pandas as pd
reader =pd.read_csv('159站点8月份刷卡数据.csv',sep=',',chunksize=10000,usecols=[1],engine='python')
#每个月最后一天,没有与之比较,故每月最后一天无法获得,通过取数据及最后一条记录即可
r_d=[]
for A in reader:
a0=int(A.iloc[0,0][8:10])
a2=int(A.iloc[len(A)-1,0][8:10])
if a0!=a2:
r=find_index(A,a0,a2)
r_d.append(r)
return r_d
第2关地铁进站人数和出站人数统计计算
#在上一关的基础上,利用每天最后一条刷卡记录的行标号,
#统计获得159站点每天的进站人数和出站人数,结果用一个数据框df来表示,字段名称依次为:
#A1_日期、A2_进站人数、A3_出站人数
import step9_1
r = step9_1.return_values()
def return_values():
import pandas as pd
A=pd.read_csv('159站点8月份刷卡数据.csv',sep=',',engine='python')
A1=[]
A2=[]
A3=[]
for i in range(len(r)):
A1.append(r[i][0][:10])
if i==0:
At=A.iloc[:r[i][1]+1,:]
A2.append(len(At.iloc[At.iloc[:,0].values==21,:]))
A3.append(len(At.iloc[At.iloc[:,0].values==22,:]))
if i>0:
At=A.iloc[r[i-1][1]+1:r[i][1]+1,:]
A2.append(len(At.iloc[At.iloc[:,0].values==21,:]))
A3.append(len(At.iloc[At.iloc[:,0].values==22,:]))
A1.append('2015-08-31')
At=A.iloc[r[len(r)-1][1]+1:,:]
A2.append(len(At.iloc[At.iloc[:,0].values==21,:]))
A3.append(len(At.iloc[At.iloc[:,0].values==22,:]))
D={'A1_日期':A1,'A2_进站人数':A2,'A3_出站人数':A3}
df=pd.DataFrame(D)
return df
第3关天气、周末、节假日数据指标设计及计算
# -*- coding: utf-8 -*-
import pandas as pd
def return_values():
# 读取数据表
df = pd.read_excel("星期、天气、节假日数据.xlsx")
# 获取所有列名
cols = df.columns.tolist()
# 智能匹配列名(关键词查找)
date_col = next((c for c in cols if "日期" in c), cols[0])
week_col = next((c for c in cols if "星期" in c), cols[1])
# 节假日列:找包含"节"/"假"/"holiday"的列,找不到就用第3列兜底
holiday_col = next((c for c in cols if "节" in c or "假" in c or "holiday" in c.lower()), cols[2])
temp_col = next((c for c in cols if "温" in c or "度" in c), cols[3])
weather_col = next((c for c in cols if "天气" in c or "雨雪" in c), cols[4])
# 初始化结果数据框
data = pd.DataFrame()
# A1_日期
data["A1_日期"] = df[date_col]
# A2_星期值:星期一~星期四=0;星期五=0.5;周末=1
def week_val(x):
x = str(x).strip()
if x in ["星期一", "星期二", "星期三", "星期四"]:
return 0
elif x == "星期五":
return 0.5
else: # 星期六、星期日
return 1
data["A2_星期值"] = df[week_col].apply(week_val)
# A3_节假日:中秋、国庆=1;其他节假日=0.5;非节假日=0
def holiday_val(x):
x = str(x).strip()
if x in ["中秋节", "国庆节"]:
return 1
elif x == "非节假日" or x == "" or x == "nan":
return 0
else:
return 0.5
data["A3_节假日"] = df[holiday_col].apply(holiday_val)
# A4_气温:>=10度为1,否则为2
data["A4_气温"] = df[temp_col].apply(lambda x: 1 if float(x) >= 10 else 2)
# A5_雨雪:晴/阴/多云/转晴/转多云=1;小雨/阵雨/转小雨/转阵雨=2;其他=3
def weather_val(x):
x = str(x).strip()
if x in ["晴", "阴", "多云", "转晴", "转多云"]:
return 1
elif x in ["小雨", "阵雨", "转小雨", "转阵雨"]:
return 2
else:
return 3
data["A5_雨雪"] = df[weather_col].apply(weather_val)
return data
第4关因变量和自变量数据的融合计算
# 获得第2关的每日进站人数和出站人数数据,和第3关的每日影响因素指标值
# 以日期作为关联字段,进行内连接,获得完整的因变量和自变量数据df(数据框)
def return_values():
import step9_2
import step9_3
import pandas as pd
r=step9_2.return_values()
r1=step9_3.return_values()
df=pd.merge(r1,r,how='inner',on=['A1_日期'])
return df
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)