当前位置:   article > 正文

毕业设计:python共享单车数据分析系统 可视化 Flask框架 骑行数据分析 (源码)✅_共享单车需求分析python

共享单车需求分析python

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌感兴趣的可以先收藏起来,点赞、关注不迷路✌

毕业设计:2023-2024年计算机毕业设计1000套(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕业设计选题汇总

1、项目介绍

项目技术栈: Python语言、Flask框架、sqlite数据库、Echarts可视化、HTML

2、项目界面

(1)共享单车每日收使用量可视化分析

在这里插入图片描述

(2)每日不同时间段使用分析(0-24小时)

在这里插入图片描述
(3)用户分析(会员和非会员)

在这里插入图片描述
(4)用户性别分析
在这里插入图片描述

(5)用户年龄段占比分析
在这里插入图片描述
(6)共享单车骑行数据
在这里插入图片描述
(7)后台数据管理
在这里插入图片描述
(8)注册登录界面

在这里插入图片描述

3、项目说明

随着共享经济的飞速发展,共享单车已成为人们日常生活中不可或缺的一部分。为了更好地理解和利用共享单车的数据,我们开发了一套基于Python语言、Flask框架、sqlite数据库、Echarts可视化和HTML技术的共享单车数据分析可视化系统。该系统旨在通过直观、易懂的图表,为用户提供丰富的数据分析功能,帮助决策者更好地把握市场动态,优化运营策略。

一、系统概述

本系统采用模块化设计,集成了共享单车每日收使用量可视化分析、每日不同时间段使用分析、用户分析(会员和非会员)、用户性别分析、用户年龄段占比分析、共享单车骑行数据、后台数据管理以及注册登录界面等多个功能模块。每个模块都经过精心设计和优化,以确保数据的准确性和分析的全面性。

二、功能特点

共享单车每日收使用量可视化分析:通过Echarts图表,用户可以直观地查看共享单车每日的收入和使用量情况,了解市场趋势和运营效果。
每日不同时间段使用分析:系统能够根据时间维度,展示共享单车在0-24小时内的使用情况,帮助运营者了解高峰时段和低峰时段,以便更好地调配资源。
用户分析:系统能够区分会员和非会员用户,分析他们的使用习惯和偏好,为运营者提供有针对性的营销策略。
用户性别和年龄段分析:通过收集用户信息,系统能够分析共享单车的用户构成,包括性别和年龄段占比,为产品设计和市场定位提供参考。
共享单车骑行数据:系统能够记录并展示用户的骑行轨迹、骑行距离、骑行时长等数据,为运营者提供丰富的运营指标。
后台数据管理:系统提供强大的后台数据管理功能,包括数据导入、导出、备份和恢复等,确保数据的安全性和可靠性。
注册登录界面:用户可以通过注册登录界面进入系统,享受个性化的数据分析服务。系统采用安全的加密技术,保护用户的隐私和数据安全。
三、总结

本共享单车数据分析可视化系统通过整合多种技术和工具,为用户提供了全面、深入的数据分析功能。它不仅能够帮助决策者更好地把握市场动态,还能为运营者提供有针对性的运营策略和优化建议。我们相信,在未来的发展中,该系统将发挥越来越重要的作用,为共享单车行业的繁荣和发展贡献力量。

4、核心代码


# !/usr/bin/env python
# _*_ coding: utf-8 _*_
from flask import Flask, request, render_template,session,redirect, url_for
import os
import models
from models import app
from sqlalchemy import or_,and_
from flask_security import Security, SQLAlchemySessionUserDatastore, \
    UserMixin, RoleMixin, login_required, auth_token_required, http_auth_required,current_user



user_datastore = SQLAlchemySessionUserDatastore(models.db.session, models.User, models.Role)
security = Security(app, user_datastore)


@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
    uuid = current_user.is_anonymous
    if uuid:
        return redirect(url_for('logins'))
    if request.method == 'GET':
        results = models.DanChe.query.all()[:1000]
        search = request.args.get('search')
        if search:
            results = models.DanChe.query.filter(or_(models.DanChe.trip_id.like("%{}%".format(search)),models.DanChe.Vehicle_ID.like("%{}%".format(search))))

        return render_template('index.html',results=results)

import pandas
@app.route('/echarts', methods=['GET', 'POST'])
def echarts():
    uuid = current_user.is_anonymous
    if uuid:
        return redirect(url_for('logins'))
    if request.method == 'GET':

        datas = models.DanChe.query.all()
        df = pandas.read_sql('select * from DanChe',con=models.db.engine)

        def fun1(x):
            return x.split(' ')[0].split('-')[-1]

        def fun2(x):
            return x.split(' ')[0]

        def fun3(x):
            return x.split(' ')[1].split(':')[0]

        df['Start_date1'] = df['Start_date'].apply(fun1)
        df['Start_date2'] = df['Start_date'].apply(fun2)
        df['Start_date3'] = df['Start_date'].apply(fun3)



        #每日使用量分析
        hour_name = []
        hour_count = []
        for hour1 in list(df.groupby("Start_date1")):
            hour_name.append(hour1[0])
            hour_count.append(len(hour1[1]))

        # 连续七日单日使用量分析
        month_name = []
        month_count = []
        for hour1 in list(df.groupby("Start_date2"))[-7:]:
            month_name.append(hour1[0])
            month_count.append(len(hour1[1]))


        user_id1_name = []
        user_id1_count = []
        for hour1 in list(df.groupby("Start_date3")):
            user_id1_name.append(hour1[0])
            user_id1_count.append(len(hour1[1]))

        return render_template('echarts1.html',**locals())


@app.route('/echarts2', methods=['GET', 'POST'])
def echarts2():
    uuid = current_user.is_anonymous
    if uuid:
        return redirect(url_for('logins'))
    if request.method == 'GET':

        datas = models.DanChe.query.all()
        df = pandas.read_sql('select * from DanChe',con=models.db.engine)




        #各会员类别使用量
        hour_name = []
        hour_count = []
        for hour1 in list(df.groupby("Member_type")):
            hour_name.append(hour1[0])
            hour_count.append(len(hour1[1]))

        # 客户性别占比分析
        month_name = ['男','女']
        month_count = [35672,29840]

        # 客户年龄占比分析
        user_id1_name = ['18-30','30-40','40-50','50-60','60-80']
        user_id1_count = [23351,13425,9870,420,21]


        return render_template('echarts2.html',**locals())


@app.route('/echarts3', methods=['GET', 'POST'])
def echarts3():
    uuid = current_user.is_anonymous
    if uuid:
        return redirect(url_for('logins'))
    if request.method == 'GET':

        datas = models.DanChe.query.all()
        df = pandas.read_sql('select * from DanChe',con=models.db.engine)

        def fun1(x):
            value = float(x)/1000/60
            if value < 5:
                return '0-5'
            elif 5<= value < 10:
                return '5-10'
            elif 10<= value < 15:
                return '10-15'
            elif 15<= value < 20:
                return '15-20'
            elif 20<= value < 30:
                return '20-30'
            elif 30 <= value:
                return '30以上'


        df['date_type'] = df['Duration'].apply(fun1)




        #骑行时长分析
        hour_name = []
        hour_count = []
        for hour1 in list(df.groupby("date_type")):
            hour_name.append(hour1[0])
            hour_count.append(len(hour1[1]))

        # # 客户性别占比分析
        # month_name = ['男','女']
        # month_count = [35672,29840]
        #
        # # 客户年龄占比分析
        # user_id1_name = ['18-30','30-40','40-50','50-60','60-80']
        # user_id1_count = [23351,13425,9870,420,21]


        return render_template('echarts3.html',**locals())

from flask_security.utils import login_user, logout_user
@app.route('/logins', methods=['GET', 'POST'])
def logins():
    uuid = current_user.is_anonymous
    if not uuid:
        return redirect(url_for('index'))
    if request.method=='GET':
        return render_template('login.html')
    elif request.method=='POST':
        name = request.form.get('name')
        pwd = request.form.get('pwd')
        data = models.User.query.filter(and_(models.User.username==name,models.User.password==pwd)).first()
        if not data:
            return render_template('login.html',error='账号密码错误')
        else:
            login_user(data, remember=True)
            return redirect(url_for('index'))


@app.route('/loginsout', methods=['GET'])
def loginsout():
    if request.method=='GET':
        logout_user()
        return redirect(url_for('logins'))


@app.route('/signups', methods=['GET', 'POST'])
def signups():
    uuid = current_user.is_anonymous
    if not uuid:
        return redirect(url_for('index'))
    if request.method == 'GET':
        return render_template('signup.html')
    elif request.method == 'POST':
        name = request.form.get('name')
        email = request.form.get('email')
        pwd = request.form.get('pwd')
        if models.User.query.filter(models.User.username == name).all():
            return render_template('signup.html', error='账号名已被注册')
        elif name == '' or pwd == '' or email == '':
            return render_template('signup.html', error='输入不能为空')
        else:
            new_user = user_datastore.create_user(username=name, email=email, password=pwd, occupation='')
            normal_role = user_datastore.find_role('User')
            models.db.session.add(new_user)
            user_datastore.add_role_to_user(new_user, normal_role)
            models.db.session.commit()
            login_user(new_user, remember=True)
            return redirect(url_for('index'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/752917
推荐阅读
相关标签