说明:本文重在说明交易数据统计、分析方法,所有数据均为生成的数据

    时间原因代码未定义成函数

统计指标:1.用户单日交易行为数据

     2.按小时为计算单位,统计用户行为数据(旨在求得一天24小时中每个小时的交易金额、交易量和后再做统计计算)

获取数据代码如下:

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 __author__ = 'zqf'
 4
 5
 6 import pymysql
 7 import random
 8 import time
 9 from conf import test_conf
10
11
12 con = pymysql.connect(**test_conf.con_set)
13 print("连接成功")
14 cur = con.cursor()
15 time_start = time.time()
16 for i in range(1, 100000):
17     phone_random = random.randint(10000000000, 19999999999)
18     transaction_amount_random = random.uniform(0, 50000)
19     transaction_type_random = random.randint(1, 5)
20     # sql = "select * from my_database.transcation_info"
21     sql = "insert into my_database.transaction_info(user_id, name, phone, transaction_amount, transaction_type, " \
22           "transaction_time) values('%d', 'name%d', '%d', '%d', '%d', '2019-05-%d %d:%d:%d')" % \
23           (random.randint(1, 1000), random.randint(1, 1000), phone_random, transaction_amount_random,
24            transaction_type_random, random.randint(1, 31), random.randint(0, 23), random.randint(0, 59),
25            random.randint(0, 59))
26
27     cur.execute(sql)
28 print("execute完毕即将提交")
29 try:
30     con.commit()
31     print("提交成功")
32 except Exception:
33     print("插入失败")
34     con.rollback()
35 time_stop = time.time()
36 take_time = time_stop - time_start
37 print("花费时间:", take_time)
38 # print(cur.fetchall())

在juoyter-notebook中

导入所需包

# 导入所需包import pandas as pd
import pymysql
from datetime import datetime
import time
from matplotlib import pyplot as plt
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
# from conf import test_conf

连接sql数据库

 

 1 # 连接数据库
 2 con = pymysql.connect(**{
 3     'database': 'my_database',
 4     'host': '192.168.**.**',
 5     'port': 3306,
 6     'user': 'root',
 7     'password': '********',
 8     'charset': 'utf8'
 9 })
10 print("连接成功")
11 cur = con.cursor()
12 sql = "select * from transaction_info"
13 time_start = time.time()
14 df = pd.read_sql(sql=sql, con=con)
15 time_stop = time.time()
16 take_time = time_stop - time_start
17 print("读取十万条数据花费时间:", take_time)
18 # print(df)

连接成功
读取十万条数据花费时间: 4.09512186050415

# 用户每天每小时最大交易金额
df_groupby_hour = df.groupby(['user_id', df['transaction_time'].apply(lambda item: datetime.strftime(item, '%Y-%m-%d %H'))])

# 计算每天每小时交易金额最大值, 最小值, 平均值, 交易次数, 交易金额总计
df_calculate_by_hour = df_groupby_hour['transaction_amount'].agg([["daily_max", "max"], ["daily_min", "min"], ["daily_mean", "mean"], ["daily_count", "count"], ["daily_sum", "sum"]])

# 注:每天每小时交易金额最大值为每个小时中累计金额的最大值,所以后续需对hour_sum计算相应参数,hour_max、hour_min、hour_mean的后续相应
# 计算均为以天为单位
df_calculate_by_hour

# 将user_id, transaction_time层索引设置成列索引
df_calculate_by_hour_reset_index = df_calculate_by_hour.reset_index()
df_calculate_by_hour_reset_index

# 再根据user_id、transaction_time 分组,到天
df_calculate_by_hour_reset_index_regroup = df_calculate_by_hour_reset_index.groupby(['user_id', df_calculate_by_hour_reset_index['transaction_time'].apply(lambda item: datetime.strftime(pd.to_datetime(item), '%Y-%m-%d'))])

# 聚合计算
df_finally = df_calculate_by_hour_reset_index_regroup.agg({'daily_max':['max'], 'daily_min':['min'], 'daily_mean':['mean'], 'daily_count':['sum', 'max', 'min', 'median', 'std', 'mean'], 'daily_sum':['sum', 'max', 'min', 'median', 'std', 'mean']})

# 获取用户交易信息
search_user_id = 1
get_user_message = df_finally.loc[search_user_id]# 将user_id, transaction_time层索引设置成列索引
df_finally_reset = df_finally.reset_index()df_finally.loc[search_user_id]

# 绘制每天参数图

plt.figure(figsize=(10, 6))
plt.xticks(rotation=45)
x = df_finally.loc[search_user_id].index
li_daily = df_finally.columns.levels[0][:-2]
colors = ['y', 'k', 'r']
for index, i in enumerate(li_daily):plt.plot(x, df_finally.loc[search_user_id][i][df_finally[i].columns[0]], label=f"{i}", color=colors[index])plt.title("每天交易统计")
plt.xlabel("日期")
plt.ylabel("交易金额")
plt.legend()
plt.show()

# 绘制交易量交易图
plt.figure(figsize=(10, 6))
plt.xticks(rotation=45)
daily_count_str = df_finally.columns.levels[0][3]
li_counts = df_finally[daily_count_str].columns
x = df_finally.loc[search_user_id].index
df_finally.columns.levels[0][3]
colors = ['b', 'g', 'c', 'y', 'k', 'r']
for index, i in enumerate(li_counts):plt.plot(x, df_finally.loc[search_user_id][daily_count_str][i], label=f"{i}", color=colors[index])plt.title("每天交易统计")
plt.xlabel("日期")
plt.ylabel("交易次数")
plt.legend()
plt.show()

# 绘制每天每小时交易图
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10, 6))
plt.xticks(rotation=45)
x = df_finally.loc[search_user_id].index
li_daily_hour = df_finally.columns.levels[1]
daily_sum_str = df_finally.columns.levels[0][4]
colors = ['b', 'g', 'c', 'y', 'k', 'r']
for index, i in enumerate(li_daily_hour):plt.plot(x, df_finally.loc[search_user_id][daily_sum_str][i], label=f"{i}", color=colors[index])plt.title("每天每小时交易统计")
plt.xlabel("日期")
plt.ylabel("交易金额")
plt.legend()
plt.show()

转载于:https://www.cnblogs.com/tttzqf/p/10880296.html

基于python、jupyter-notebook 的金融领域用户交易行为分析相关推荐

  1. 基于Python是疫情期间教育领域新闻知识图谱分析

    目录 第一章 数据抓取与文本提取 1 1.1数据抓取 1 1.1.1网页链接定位 1 1.1.2 获取新闻信息 1 1.1.3 文件写入 1 1.1.4 爬取结果展示 2 1.2 分词 3 1.3 小 ...

  2. python jupyter notebook 多个excel文档合并

    #python jupyter notebook 合并多个excel表格的代码 ```python import pandas as pd file1 = pd.read_excel('E:/你的目录 ...

  3. Python数据分析初探项目 基于Python数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022年)

    Python 数据分析初探项目 基于 Python 数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022 年) Python 数据分析初探项目 基于 Python 数据可 ...

  4. 熙牛《新金融领域—科技交易论坛》圆满落幕

    作为对新鲜事物具有强烈探索欲望的新一代青年,你经常会从各种文章.期刊和媒体报道上看到很多关于比特币.AI智能交易.区块链技术等的词汇.当看到这些的时候,你最想问的也许是:区块链.数字货币和AI智能交易 ...

  5. python教程jupyternotebook_搭建Python Jupyter Notebook教程

    Jupyter原来叫做IPython,后来改名为Jupyter,意思是Julia+Python+R,囊括了三大数据科学语言.Jupyter编程环境具有以下两个特点: 中心化工作环境:Jupyter支持 ...

  6. Python,Jupyter Notebook,IPython快速安装教程

    Python,IPython,Jupyter Notebook快速安装教程 下一篇:IPython.Notebook.qtconsole使用教程 下一篇Python数据科学安装Numby,pandas ...

  7. [python][jupyter notebook]之菜鸟安装[pyecharts]中Geo或Map显示问题

    作为菜鸟,在学习使用pyecharts模块进入jupyter notebook的时候,又遇到了问题--那就是,可以使用一下代码,导入Geo和Map模块,但是弄了之后看不见地图. from pyecha ...

  8. Python/Jupyter Notebook以及可视化的运用

    最近陆陆续续使用Jupyter Notebook和Python可视化做了一些小工具,用于提高开发效率. 这里将其归类总结一下,作为学习的记录. 转载于:https://www.cnblogs.com/ ...

  9. python的jupyter的使用教程-Python·Jupyter Notebook各种使用方法

    安装Jupyter Notebook的先决条件:已经安装了python(python 2.7 或者是python3) 具体的安装方法: 官方建议利用Anaconda安装Jupyter 安装完成Anac ...

  10. Python·Jupyter Notebook各种使用方法

    PythonJupyter Notebook各种使用方法记录持续更新 一 Jupyter NoteBook的安装 1 新版本Anaconda自带Jupyter 2 老版本Anacodna需自己安装Ju ...

最新文章

  1. k-means聚类算法从入门到精通
  2. 人工智能将如何改变芯片设计
  3. Mysql-explain之Using temporary和Using filesort解决方案
  4. 四旋翼建模与开源飞控算法(草稿,待整理)
  5. BZOJ-2324 营救皮卡丘 最小费用可行流+拆下界+Floyd预处理
  6. Securing Spring Cloud Microservices With OAuth2
  7. linux php 版本切换,linux更换PHP版本,多个PHP版本切换
  8. 【转】DIB位图(Bitmap)的读取和保存
  9. php去除所有标点符号的方法,php如何去除标点符号
  10. Android的5个进程等级(转)
  11. ScintillaNET的应用
  12. Linux yum安装java环境
  13. Pr 视频效果:颜色校正
  14. 推荐好轮子【Echarts数据可视化】图表插件 兼容ie6、7、8
  15. WinSock IO模型五: 完成端口
  16. excel 如何冻结多行多列
  17. 做读书笔记好用的软件分享
  18. matlab模拟夫琅禾费单缝衍射,夫琅禾费衍射的Matlab仿真
  19. 【科创人独家】PerfMa“寒泉子”李嘉鹏:成长和创业都要能人所不能,真强者何惧资本寒冬
  20. html中圆角的度,cssli圆角

热门文章

  1. python求解给定一个整数N,求N!末尾有多少个0,求N!的二进制中最低位1的位置
  2. python 包的使用 (二)——tesseract识别图片中的文字
  3. 深度学习中的batch,iteration,epoch复习总结
  4. linux 隐藏字符 h,webpack手动配置
  5. BootStrap的应用——实现黑马旅游网页面
  6. android图片 垂直排列,Android图片切换特效示例:水平百叶窗、垂直百叶窗、马赛克...
  7. html中img显示旋转,css如何实现图片的旋转展示效果(代码示例)
  8. html css菜鸟,CSS菜鸟教程阅读笔记
  9. mysql 临时表 创建和插入
  10. Java 加密扩展(JCE)框架 之 Cipher 加密与解密