前言
我在大三时候去了一家互联网公司做 前端实习生。现在大四了。
本着对 前端甚至服务端 无比感兴趣的我,硬是被要求毕业设计必须要有 数据分析(python,不限环境 如:Flask、Django、spark都可以
相关文章
好好好,这样玩? 那可别怪我 chat-gpt 的强大了
注:想了解 Python 可以跳过设计思路看 大为震惊
先贴地址
交作业啦-前端:->这里是前端代码地址
交作业啦-后端&接口文档:->这里有更详细的文档介绍
也累计了500+次提交啦,感兴趣可以关注一下~
项目地址:
设计思路
名称:交作业啦H5
软件: 帮可怜的学委收一下作业
- 同学交作业
- 总裁收作业
- 老师发布作业
整体从这三项大方向上延伸,如:各个方向的数据分析(老师和学生都有)、反馈系统、上传用户、权限配置、作业统计等...
技术选型
- 前端:Vue3 、Vite4、TS、JSX、vueRouter、axios、Echarts、sass
- 后端:Node.js、Express 、 express-validator、jwt、nodemailer、Mocha
- 数据分析:Python、Flask、mongoDB
- 接口文档:React、vite、react-router、sass-loader、hooks
- 服务器:腾讯云
- 技术脚本:Bash自动化部署脚本(shell)、COS
注:数据分析引用技术 pandas、PyMongo、KMeans、矩阵分析、聚类分析、模型训练等
数据设计思路
学生相关
老师相关
接口文档设计
UI界面
React组件封装(没用第三方 除了react-json-view)
组件 如: Message、Notion、Menu等 hooks 如:useCopy(一键复制)、useMove(手指滑动)、useScroll(鼠标滚动)
大为震惊
本专业学习的 python 使用起来竟然如此
简单方便?
虽然之前有过 Ruby 这种动态语言的使用经验,但还是被 python 的生态惊艳到了!
我用几个示例展示:这并不仅仅是语言的简易方便,并且非常语义化
- 示例1:请求
python
import requests
# 发送GET请求
response = requests.get("https://www.example.com")
# 检查响应状态码
if response.status_code == 200:
# 打印响应内容
print(response.text)
else:
print("请求失败,状态码:", response.status_code)
- 示例2:使用Pillow库,你可以进行图像处理操作,如打开、调整大小、裁剪等。展示如何打开图像文件并调整其大小:
python
from PIL import Image
# 打开图像
image = Image.open("image.jpg")
# 调整图像大小
resized_image = image.resize((200, 200))
# 保存调整后的图像
resized_image.save("resized_image.jpg")
- 示例3:Flask框架的Api服务搭建
python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
- 示例4:分词文本并计算词频:
python
import nltk
from nltk.tokenize import word_tokenize
from nltk.probability import FreqDist
nltk.download('punkt')
text = "This is a simple example sentence. Tokenization is the process of splitting text into words."
# 分词
words = word_tokenize(text)
# 计算词频
freq_dist = FreqDist(words)
# 显示前10个常见词
print(freq_dist.most_common(10))
So ??? 全是库?
举一个🌰(ChatGPT老师全程)
1、这是一个 获取学生提交作业周频率的api 例如: 1、传入 10月10日(周二)就会去拿 10月9日(周一)到10月15日(周日)上下一周时间的提交数据 2、分析这周数据每天的提交量,最终返回
python
@student.route("/week")
def week_frequency():
date = request.args.get('time')
name = request.args.get('name')
if not date or not name:
return make_response(jsonify(message="date and name are required"), 400)
# 将查询参数转换为 datetime 对象
start_date = datetime.strptime(date, '%Y-%m-%d')
# 计算出开始日期之前的7天的日期
end_date = start_date - timedelta(days=7)
# 查询在指定日期范围内的提交
data = mongo.db.homeworks.find({"name": name, "time": {"$gte": end_date.timestamp()*1000, "$lt": start_date.timestamp()*1000}})
data_list = []
for item in data:
item['_id'] = str(item['_id'])
data_list.append(item)
# 如果没有找到任何提交,返回一个表示没有提交的响应
if not data_list:
return jsonify([{"day": day, "week": 0} for day in ['周一', '周二', '周三', '周四', '周五', '周六', '周日']])
# 将查询参数解析为 DataFrame
df = pd.DataFrame(data_list)
# 将 'time' 列转换为 datetime 对象
df['time'] = pd.to_datetime(df['time'], unit='ms')
# 添加一列来表示一周中的哪一天(1代表周一,7代表周日)
df['day_of_week'] = df['time'].dt.dayofweek + 1
# 创建一个字典,将数字映射到对应的星期几
days = {1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六', 7: '周日'}
# 使用这个字典来替换 'day_of_week' 列中的值
df['day_of_week'] = df['day_of_week'].map(days)
# 按 'day_of_week' 列进行分组,然后计算每天的提交次数
daily_frequency = df.groupby('day_of_week')['name'].count()
# 使用 reindex 方法来确保返回的结果包含所有的天
daily_frequency = daily_frequency.reindex(days.values(), fill_value=0)
# 将结果转换为 JSON 并返回
return jsonify(daily_frequency.reset_index().rename(columns={'day_of_week': 'day', 'name': 'week'}).to_dict(orient='records'))
python
if ... not
return ... # 这小白也看得懂吧?
还不太清楚Python语言特点?
我之前做过一个欧洲杯的课题:再看一下简单不?
python
# 导入Pandas库并读取Euro2012_stats.csv文件到DataFrame对象euro12
euro12 = pd.read_csv('./app/index/Euro2012_stats.csv')
# 计算不同球队的数量
num_teams = euro12['Team'].nunique()
# 获取DataFrame的列数
num_columns = euro12.shape[1]
# 创建一个新的DataFrame对象discipline,包含'Team'、'Yellow Cards'和'Red Cards'列
discipline = euro12[['Team', 'Yellow Cards', 'Red Cards']]
# 对discipline DataFrame按'Red Cards'和'Yellow Cards'列进行降序排序
discipline = discipline.sort_values(['Red Cards', 'Yellow Cards'], ascending = False)
# 计算所有球队的平均黄牌数量
average_yellow_cards = discipline['Yellow Cards'].mean()
# 选择进球数('Goals')大于6的球队
teams_over_6_goals = euro12[euro12['Goals'] > 6]
# 选择球队名以字母'G'开头的球队
g_teams = euro12[euro12['Team'].str.startswith('G')]
# 选择DataFrame的前7列
first_7_columns = euro12.iloc[:, :7]
# 选择DataFrame的除了最后3列以外的所有列
all_but_last_3 = euro12.iloc[:, :-3]
# 选择球队名为'England'、'Italy'和'Russia'的球队,并且只包括'Team'和'Shooting Accuracy'列
teams = ['England', 'Italy', 'Russia']
accuracy = euro12.loc[euro12['Team'].isin(teams), ['Team', 'Shooting Accuracy']]
这你还有的说嘛? 这库一引入,多方便呐 😂
无奈💢
纵使我前前后后写了十几个接口......但我的初代项目引数据量小->不足以构成数据分析?->失败!
话虽如此:公司所有的项目从0开始就有很多数据吗?数据岗位的难道不是从数据0做起的嘛~
头疼,原本想着够选题也行 :)