机器学习 Rider数据集分析和预测

news2024/12/26 22:56:19

介绍数据集

ride_id:乘车ID
rideable_type:乘车类型
started_at:开始日期
ended_at :结束日期
start_station_name:开始站的名字
start_station_id:开始站的ID
end_station_name:结束站的名字
end_station_id :结束站的ID
start_lat:出发的维度
start_lng:出发的经度
end_lat:结束的维度
end_lng:结束的经度
member_casual:会员和非会员

实战演练

准备数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')

#导入数据
df1 = pd.read_csv('C:/Rider/202101-divvy-tripdata/202101-divvy-tripdata.csv',engine='python')
df2 = pd.read_csv('C:/Rider/202102-divvy-tripdata/202102-divvy-tripdata.csv',engine='python')
df3 = pd.read_csv('C:/Rider/202103-divvy-tripdata/202103-divvy-tripdata.csv',engine='python')
df4 = pd.read_csv('C:/Rider/202004-divvy-tripdata/202004-divvy-tripdata.csv',engine='python')
df5 = pd.read_csv('C:/Rider/202005-divvy-tripdata/202005-divvy-tripdata.csv',engine='python')
df6 = pd.read_csv('C:/Rider/202006-divvy-tripdata/202006-divvy-tripdata.csv',engine='python')
df7 = pd.read_csv('C:/Rider/202007-divvy-tripdata/202007-divvy-tripdata.csv',engine='python')
df8 = pd.read_csv('C:/Rider/202008-divvy-tripdata/202008-divvy-tripdata.csv',engine='python')
df9 = pd.read_csv('C:/Rider/202009-divvy-tripdata/202009-divvy-tripdata.csv',engine='python')
df10 = pd.read_csv('C:/Rider/202010-divvy-tripdata/202010-divvy-tripdata.csv',engine='python')
df11 = pd.read_csv('C:/Rider/202011-divvy-tripdata/202011-divvy-tripdata.csv',engine='python')
df12 = pd.read_csv('C:/Rider/202012-divvy-tripdata/202012-divvy-tripdata.csv',engine='python')

#将所有数据进行拼接成
df = pd.concat([df1,df2,df3,df4,df5,df6,df7,df8,df9,df10,df11,df12],axis=0)

df.head()

df.shape #(3489748, 13)

在这里插入图片描述

#检查数据是否有缺失值
pd.isnull(df).sum()
'''
ride_id                    0
rideable_type              0
started_at                 0
ended_at                   0
start_station_name    122175
start_station_id      122801
end_station_name      143242
end_station_id        143703
start_lat                  0
start_lng                  0
end_lat                 4738
end_lng                 4738
member_casual              0
dtype: int64
'''
# 对整张表格进行统计描述
df.describe()

在这里插入图片描述

start_station_name

#统计一共有多少种
df['start_station_name'].nunique()  #708

# 统计每种有多少个
df['start_station_name'].value_counts()
'''
Streeter Dr & Grand Ave          35363
Clark St & Elm St                32472
Lake Shore Dr & Monroe St        29918
Theater on the Lake              29888
Lake Shore Dr & North Blvd       27126
                                 ...  
N Hampden Ct & W Diversey Ave        1
Stewart Ave & 63rd St (*)            1
N Damen Ave & W Wabansia St          1
N Clark St & W Elm St                1
S Michigan Ave & E 118th St          1
Name: start_station_name, Length: 708, dtype: int64
'''

# 对指定的列进行统计描述
df.start_station_name.describe()
'''
count                     3367573
unique                        708
top       Streeter Dr & Grand Ave
freq                        35363
Name: start_station_name, dtype: object
'''

end_station_name

#一共有多少种
df['end_station_name'].nunique()  #706

# 统计每种有多少
df['end_station_name'].value_counts()
'''
Streeter Dr & Grand Ave          37425
Clark St & Elm St                32259
Theater on the Lake              31281
Lake Shore Dr & Monroe St        29280
Lake Shore Dr & North Blvd       27611
                                 ...  
Avenue L & 114th St                  3
S Wentworth Ave & W 111th St         2
hubbard_test_lws                     2
Kedzie Ave & 110th St                2
N Hampden Ct & W Diversey Ave        1
Name: end_station_name, Length: 706, dtype: int64
'''

df.end_station_name.describe()
'''
count                     3346506
unique                        706
top       Streeter Dr & Grand Ave
freq                        37425
Name: end_station_name, dtype: object
'''

将开始的日期转换为周

df['started_at'] = pd.DatetimeIndex(df['started_at'])
#去掉时分秒
df["started_at"] = df["started_at"].dt.date 

df['start_week']=pd.to_datetime(df['started_at'])
df['start_week'] = df['start_week'].dt.weekday

将开始的日期转换成月

df['start_months']=pd.to_datetime(df['started_at'])
df['start_months']=df['start_months'].dt.month

将开始的日期转换为周

df['ended_at'] = pd.DatetimeIndex(df['ended_at'])
#去掉时分秒
df["ended_at"] = df["ended_at"].dt.date

df['end_week']=pd.to_datetime(df['ended_at'])
df['end_week'] = df['end_week'].dt.weekday

将开始的日期转换成月

df['end_months']=pd.to_datetime(df['ended_at'])
df['end_months']=df['end_months'].dt.month

在这里插入图片描述

数据分析
#数据集各列的数据类型,是否为空值,内存占用情况
df.info()
'''
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3489748 entries, 0 to 131572
Data columns (total 17 columns):
 #   Column              Dtype  
---  ------              -----  
 0   ride_id             object 
 1   rideable_type       object 
 2   started_at          object 
 3   ended_at            object 
 4   start_station_name  object 
 5   start_station_id    object 
 6   end_station_name    object 
 7   end_station_id      object 
 8   start_lat           float64
 9   start_lng           float64
 10  end_lat             float64
 11  end_lng             float64
 12  member_casual       object 
 13  start_week          int64  
 14  start_months        int64  
 15  end_week            int64  
 16  end_months          int64  
dtypes: float64(4), int64(4), object(9)
memory usage: 479.2+ MB
'''
#把类型进行分组
numerical_cols, categorical_cols = [], []

for col in df.columns:
    if df[col].dtype=="int64":
        numerical_cols.append(col)
    elif df[col].dtype=="float64":
        numerical_cols.append(col)
    else:
        categorical_cols.append(col)

n_numerical = len(numerical_cols)
n_categorical = len(categorical_cols)

print("Total No. of Numerical Columns   : {}".format(n_numerical))
print("Total No. of Categorical Columns : {}".format(n_categorical))
'''
Total No. of Numerical Columns   : 8
Total No. of Categorical Columns : 9
'''
#去除一部分不太影响数据的列
df.drop(columns=['ride_id', 'started_at','ended_at','start_station_name','end_station_name'], inplace=True)
categorical_cols.remove('ride_id')
categorical_cols.remove('started_at')
categorical_cols.remove('ended_at')
categorical_cols.remove('start_station_name')
categorical_cols.remove('end_station_name')
df.head()

在这里插入图片描述

rideable_type

df[categorical_cols[0]].unique()
'''
array(['electric_bike', 'classic_bike', 'docked_bike'], dtype=object)
'''
#将字符型数据映射数字型数据
rideable_type_mapping= {'electric_bike':0.0, 'classic_bike':1.0,'docked_bike':2.0}
df[categorical_cols[0]] = df[categorical_cols[0]].map(rideable_type_mapping)

df[categorical_cols[0]].unique()
'''
array([0., 1., 2.])
'''
#计算众数
mode = df.mode(axis=0)
mode
'''
rideable_type	start_station_id	end_station_id	start_lat	start_lng	end_lat	end_lng	member_casual	start_week  start_months	end_week	end_months
0	2.0	35	35.0	41.892278	-87.612043	41.892278	-87.612043	member	5	8	5	8
'''

start_station_id

start_id = int(mode[categorical_cols[1]])
print(start_id)#35

#填补缺失值
df[categorical_cols[1]] = df[categorical_cols[1]].fillna(start_id,axis=0)
pd.isnull(df[categorical_cols[1]]).sum()#0

end_station_id

end_id = int(mode[categorical_cols[2]])
df[categorical_cols[2]] = df[categorical_cols[2]].fillna(start_id,axis=0)
pd.isnull(df[categorical_cols[2]]).sum()#0

end_lat

end_lat = float(mode[numerical_cols[2]])
df[numerical_cols[2]] = df[numerical_cols[2]].fillna(end_lat,axis=0)
pd.isnull(df[numerical_cols[2]]).sum()#0

end_lng

end_lng = float(mode[numerical_cols[3]])
df[numerical_cols[3]] = df[numerical_cols[3]].fillna(end_lat,axis=0)
pd.isnull(df[numerical_cols[3]]).sum()#0

member_casual

df[categorical_cols[3]].unique()
member_casual_mapping = {'member':0.0, 'casual':1.0}
df[categorical_cols[3]] = df[categorical_cols[3]].map(member_casual_mapping)
import plotly_express as px
rideable_type= pd.DataFrame(df.rideable_type.value_counts()).reset_index()
rideable_type.rename(columns = {'index':'rideable_type', 'rideable_type':'count'}, inplace=True)

fig = px.pie(rideable_type, values = 'count', names='rideable_type', title = 'ride_type',hole=.3, 
             color_discrete_map={'electric_bike':'lightcyan',
                                 'classic_bike':'cyan',
                                 'docked_bike':'royalblue'})
fig.show()

在这里插入图片描述

fig = px.histogram(df, x = 'start_station_id', title = 'start_station_id')
fig.show()

在这里插入图片描述

fig = px.histogram(df, x = 'end_station_id', title = 'end_station_id')
fig.show()

在这里插入图片描述

#类型转换
df[categorical_cols[2]] = pd.to_numeric(df[categorical_cols[2]],errors='coerce')
df[categorical_cols[1]] = pd.to_numeric(df[categorical_cols[1]],errors='coerce')
fig = px.pie(data_frame=df, names='member_casual', hole=0.2)
fig.update_layout({'title':{'text':"member_casual",'x':0.5}})
fig.show()

在这里插入图片描述

fig = px.pie(data_frame=df, names='start_week', hole=0.2)
fig.update_layout({'title':{'text':"start_week",'x':0.5}})
fig.show()

在这里插入图片描述

fig = px.pie(data_frame=df, names='end_week', hole=0.2)
fig.update_layout({'title':{'text':"end_week",'x':0.5}})
fig.show()

在这里插入图片描述

fig = px.pie(data_frame=df, names='start_months', hole=0.2)
fig.update_layout({'title':{'text':"start_months",'x':0.5}})
fig.show()

在这里插入图片描述

fig = px.pie(data_frame=df, names='end_months', hole=0.2)
fig.update_layout({'title':{'text':"end_months",'x':0.5}})
fig.show()

在这里插入图片描述

训练数据
import sklearn
from sklearn.preprocessing import StandardScaler

y_full = df.pop('member_casual')
X_full = df

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_full)

X_train, X_valid, y_train, y_valid = train_test_split(X_scaled, y_full)
rfc = RandomForestRegressor()
rfc.fit(X_train, y_train)

features = X_full.columns
feature_imps = rfc.feature_importances_#特征重要性

fig = px.bar(x=features, y=feature_imps)
fig.update_layout({'title':{'text':"Feature Importnace", 'x':0.5}})
fig.show()

在这里插入图片描述

#线性回归模型
from sklearn.linear_model import LogisticRegression

logreg = LogisticRegression(C=100,penalty="l2").fit(X_train,y_train)
print("模型train得分:{:.3f}".format(logreg.score(X_train,y_train)))
print("模型test得分:{:.3f}".format(logreg.score(X_valid,y_valid)))
'''
模型train得分:0.608
模型test得分:0.609
'''
pred = logreg.predict(X_valid)

logreg_mse = mean_squared_error(y_valid, pred)
logreg_rmse = np.sqrt(logreg_mse)
logreg_r2 = r2_score(y_valid, pred)

print(logreg_mse,logreg_rmse,logreg_r2)
'''
0.3913119228093261 0.6255492968658234 -0.6179405993775167
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

魔百和UNT403G 国科芯片2+8 安卓9.0 免拆机纯净线刷包

固件特点&#xff1a; 1、本固件在UNT403G 盒子上测试可用&#xff0c; 其它盒子请慎 重使用&#xff1b; 2、支持原装遥控器&#xff0c;语音蓝牙遥控器&#xff1b; 3、固件压缩包有刷机教程&#xff0c;请一定仔细阅读。 4、刷机后三网通用&#xff0c;可自由安装应用&#…

NewBing 边栏快捷插件没有了!如何解决?如何脱离浏览器使用 New Bing?

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

【移动端网页布局】流式布局 ① ( 流式布局简介 | 百分比布局 / 非固定像素布局 | 根据屏幕尺寸 / 设备类型自动调整网页布局 )

文章目录 一、流式布局简介二、流式布局代码示例 一、流式布局简介 流式布局 又称为 百分比布局 / 非固定像素布局 ; 为 流式布局 中 盒子模型 设置 百分比宽度 , 其大小可以根据屏幕宽度自适应伸缩 , 该盒子没有像素限制 , 内容自动向左右两边填充 ; 流式布局 可以 根据 设备…

蓝库云|究竟什么是ERP?它对企业有什么重要性作用呢

一、什么是ERP ERP全称为Enterprise Resource Planning&#xff0c;即企业资源计划&#xff0c;是一种运用信息技术手段来集成管理企业内部所有资源&#xff0c;协调各项业务、机构、流程和人员&#xff0c;实现高效、协同、合规经营的商业管理软件。ERP系统包括销售、采购、物…

Docker-compose组成|搭建(nginx|tomcat)

Docker-compose组成|搭建&#xff08;nginx|tomcat&#xff09; 一 Docker-Compose二 Docker-Compose安装部署三 YML文件编写注意事项四 docker Compose撰写nginx 镜像五 docker Compose撰写tomcat镜像 一 Docker-Compose 1、Docker-Compose使用场景 我们知道使用一个Dockerfi…

c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参

c/c&#xff1a;栈帧&#xff0c;传值&#xff0c;传址&#xff0c;实参传值给形参&#xff0c;传地址指针给形参 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;此时学会c的话&#xff0c; 我所知道的周边的会c的同学&…

[比赛简介]AMP®-Parkinson‘s Disease Progression Prediction

比赛链接&#xff1a;AMP-Parkinsons Disease Progression Prediction | Kaggle 比赛简介 本次竞赛的目标是预测MDS-UPDR评分&#xff0c;该评分衡量帕金森病患者的进展。运动障碍协会赞助的统一帕金森病评定量表&#xff08;MDS-UPDRS&#xff09;修订版是对与帕金森病相关…

使用Charles进行HTTPS抓包

charles安装 下载地址 https://www.charlesproxy.com/download/latest-release/ 我安装的是charles-4.6.4版本 配置手机 注意: 一定要在同一网段 mac电脑的ip地址 手机的ip地址 使用同样的命令 长按配置代理,连接到电脑 此时抓包,会看到一堆unknown, 因为请求的是https…

Web安全 文件上传靶场搭建(玩转整个 文件上传 环境.)

Web安全 文件上传靶场搭建 文件上传漏洞是指 Web 服务器允许用户将文件上传至其文件系统&#xff0c;但这些文件可能并没有经过充分的验证&#xff0c;如文件名称、类型、内容或大小等。未能正确执行这些限制就意味着即使最基本的图像上传功能也可能用于上传任意具有潜在危险的…

GitHub 现在允许大规模启用私有漏洞报告

GitHub 宣布私人漏洞报告现已普遍可用&#xff0c;并且可以在属于组织的所有存储库上大规模启用。 启用后&#xff0c;安全研究人员可以使用此专用通信渠道向开源项目的维护人员私下披露安全问题&#xff0c;而不会意外泄露漏洞详细信息。 GitHub 的埃里克图利 (Eric Tooley)…

这些美国名校的AI人工智能大牛,你知道几个?

CS专业被US News评为就业TOP 100职业第一名、STEM职业第一名、技术类职业第一名。 AI人工智能&#xff0c;随着GPT的横空出世已成为最热门的CS专业。“深度学习”和“神经网络”等是新一代人工智能的重要代表&#xff0c;如今在面部识别、语音输入、基因医疗等重要领域被广泛应…

AI Stable Diffusion Prompt参数【二】之 生成效果查验

AI Stable Diffusion Prompt参数【二】之 生成效果查验 效果国漫风生成参数配置prompt&#xff1a;Negative prompt:Model:Steps:Sampler:CFG scale:Clip skip:Model hash:Hires upscale:Hires upscaler:Denoising strength: 全部效果 效果 国漫风生成参数配置 prompt&#xf…

Windows Docker 端口占用错误解决

Windows Docker 端口占用错误解决 错误来源 Error invoking remote method ‘docker-start-container’: Error: (HTTP code 500) server error - Ports are not available: exposing port TCP 192.168.0.157:6555 -> 0.0.0.0:0: listen tcp 192.168.0.157:6555: can’t bi…

发展文旅夜游,活络城市文化生态

城市是一个对外的窗口&#xff0c;其夜间文化生态值得进一步挖掘&#xff0c;发展夜间文旅产业&#xff0c;并活络城市文化生态是重要的城市发展举措。实现这一目标需要保护和利用好城市夜景资源、挖掘城市夜生活文化内涵以及利用特色文化吸引夜游人流量。 第一、要保护和利用好…

YOLOv5实时检测调用usb摄像头 [ jetson nano -Ubuntu18.4 - Astra pro相机 ]

在基于rosmaster小车的jetson nano主板部署yolo v5目标检测网络的时候发现无法打开摄像头Astra pro进行实时监测&#xff0c;所以记录一下解决方法&#xff1a; 0.确认摄像头可用 首先先参考我上一篇博客所记录的方法打开USB摄像头&#xff1a; Jetson Nano打开USB摄像头&…

01-java基本概念

1、语言背景 Java语言是美国Sun公司&#xff08;Stanford University Network&#xff09;在1995年推出的计算机语言 Java之父&#xff1a;詹姆斯高斯林&#xff08;James Gosling&#xff09; 2009年&#xff0c;Sun公司被甲骨文公司收购&#xff0c;所以我们现在访问oracle官…

亚马逊美国站带绳窗帘

带绳窗帘 如果您在亚马逊商城发布商品&#xff0c;则必须遵守适用于这些商品和商品信息的所有联邦、州和地方法律以及亚马逊政策&#xff08;包括本政策&#xff09;。 本政策涵盖的带绳窗帘 带绳窗帘是一种室内用窗帘&#xff0c;可通过一根吊绳控制升降。此类商品包括但不…

全注解下的SpringIoc 续1-依赖注入

上篇文章介绍了ioc的基本用法和ComponentScan注解的使用&#xff0c;这篇文章我们来看看依赖注入的部分。 提起依赖注入&#xff0c;想必大家肯定会想到Autowired注解&#xff0c;的确&#xff0c;它是我们用的最多的一个。 还记得容器的顶级接口BeanFactory 吗&#xff0c;它定…

函数栈帧的创建和销毁【汇编语言理解】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

echarts双Y轴对齐;echarts堆叠柱状图;echarts数据集dataset结构;

提示&#xff1a;主要解决三个问题&#xff1a;1.echarts双Y轴设置和对齐 2.echarts堆叠柱状图 3.echarts数据集dataset结构 一、echarts双Y轴设置和对齐 1.双Y轴&#xff1a; yAxis两组数据&#xff0c;且series有组数据设置 yAxisIndex: 1 代表使用哪个Y轴的数据展示&#…