数据分析案例(5)利用MYSQL+Python对某网站的用户数进行分析

news/2024/5/20 12:06:30/文章来源:https://blog.csdn.net/qq_44182694/article/details/118049877

数据与代码链接:
https://pan.baidu.com/s/1vF3hzzI83tDDVl-kM03shQ
提取码:0202

user.sql文件大家自行导入mysql数据库中,我是放在了test01数据库中

数据由于是存储在MYsql数据库的,因此我们需要利用Python连接mysql数据库,把数据取出来

import pymysql
import pandas as pd
import matplotlib.pyplot as plt
#连接MySQL数据库,指定密码(passwd)和数据库(db)
conn = pymysql.connect(host = "localhost",user = 'root',passwd ='123456',db = 'test01',charset="utf8")
#SQL查询语句
sql_query = 'SELECT * FROM test01.user'
#读取MySQL数据
data = pd.read_sql(sql_query, con=conn)
# 关闭数据库连接
conn.close()
# 提取指定列数据
data=data[['username','addtime']]
#列重命名
data.rename(columns = {'addtime':'注册日期','username':'用户数量'},inplace=True)
#将数据类型转换为日期类型
data['注册日期'] = pd.to_datetime(data['注册日期'])
# 将日期设置为索引
data = data.set_index('注册日期')
#按月统计每一年的注册用户
index=['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
'''
print(data)用户数量
注册日期                         
2017-01-01 01:57:00  mr000001
2017-01-01 07:33:00  mr000002
2017-01-01 07:50:00  mr000003
2017-01-01 12:28:00  mr000004
2017-01-01 12:44:00  mr000005
...                       ...
2019-12-31 23:01:00  mr192304
2019-12-31 23:16:00  mr192305
2019-12-31 23:16:00  mr192306
2019-12-31 23:17:00  mr192307
2019-12-31 23:35:00  mr192308
'''#提取2017年(还可以这样取!,datatime类型的就是好用)
df_2017=data['2017']'''
print(df_2017)用户数量
注册日期                         
2017-01-01 01:57:00  mr000001
2017-01-01 07:33:00  mr000002
2017-01-01 07:50:00  mr000003
2017-01-01 12:28:00  mr000004
2017-01-01 12:44:00  mr000005
...                       ...
2017-12-31 23:24:00  mr018459
2017-12-31 23:25:00  mr018460
2017-12-31 23:44:00  mr018461
2017-12-31 23:55:00  mr018462
2017-12-31 23:57:00  mr018463data_2017_01=data['2017-01']#提取2017-01月份的数据
print(data_2017_01)用户数量
注册日期                         
2017-01-01 01:57:00  mr000001
2017-01-01 07:33:00  mr000002
2017-01-01 07:50:00  mr000003
2017-01-01 12:28:00  mr000004
2017-01-01 12:44:00  mr000005
...                       ...
2017-01-31 11:51:00  mr000552
2017-01-31 12:21:00  mr000553
2017-01-31 12:49:00  mr000554
2017-01-31 20:22:00  mr000555
2017-01-31 23:31:00  mr000556'''df_2017=df_2017.resample('M').size().to_period('M')
df_2017.index=index
'''
print(df_2017)
1月      556
2月      659
3月      814
4月      814
5月      848
6月     1068
7月     1544
8月     1378
9月     1537
10月    2305
11月    3675
12月    3265
dtype: int64
'''
df_2018=data['2018']
df_2018=df_2018.resample('M').size().to_period('M')
df_2018.index=indexdf_2019=data['2019']
df_2019=df_2019.resample('M').size().to_period('M')
df_2019.index=index
#合并
dfs=pd.concat([df_2017,df_2018,df_2019],axis=1)
'''
print(dfs)0      1     2
1月    556   3983  5863
2月    659   3676  5160
3月    814   6877  7865
4月    814  11394  6391
5月    848   6284  6355
6月   1068   5574  7344
7月   1544  10387  9216
8月   1378   7940  7612
9月   1537   7672  7609
10月  2305   7484  8438
11月  3675   7895  8929
12月  3265   6414  7483
'''
#设置列索引
dfs.columns=['2017年','2018年','2019年']
# 导出数据为Excel文件
dfs.to_excel('result2.xlsx',index=False)
#绘制折线图
#解决中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
plt.title('年度注册用户分析图')
x=index
y1=dfs['2017年']
y2=dfs['2018年']
y3=dfs['2019年']
#一表画多图
plt.plot(x,y1,label='2017年',color='b',marker='o')
plt.plot(x,y2,label='2018年',color='g',marker='o')
plt.plot(x,y3,label='2019年',color='r',marker='o')
#添加文本标签(这样在每个点上都有数据)
for a,b1,b2,b3 in zip(x,y1,y2,y3):plt.text(a,b1+200,b1,ha = 'center',va = 'bottom',fontsize=8)plt.text(a,b2+100,b2,ha='center', va='bottom', fontsize=8)plt.text(a,b3+200,b3,ha='center', va='bottom', fontsize=8)
x = range(0, 12, 1)
plt.xlabel('注册日期')
plt.ylabel('用户数量')
plt.legend()
plt.show()

其中下面是连接数据库并取数的的代码
大家需要更改的是password,db
user一般都是默认的root,如果不是的话,那么也需要改掉

conn = pymysql.connect(host = "localhost",user = 'root',passwd ='123456',db = 'test01',charset="utf8")
#SQL查询语句
sql_query = 'SELECT * FROM test01.user'
#读取MySQL数据
data = pd.read_sql(sql_query, con=conn)
# 关闭数据库连接
conn.close()

在这里插入图片描述
下面这个是2018-04月份的新增用户数量
大家还可以更改分析的时间

毕竟数据是有2017-2019三年的数据

import pymysql
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
#解决图表显示日期出现警告信息
register_matplotlib_converters()#连接MySQL数据库,指定密码(passwd)和数据库(db)
conn = pymysql.connect(host = "localhost",user = 'root',passwd ='123456',db = 'test01',charset="utf8")
#SQL查询语句
sql_query = 'SELECT * FROM test01.user'
#读取MySQL数据
data = pd.read_sql(sql_query, con=conn)
# 关闭数据库连接
conn.close()
# print(data.head())
# print(data.info())data=data[['username','addtime']]
data.rename(columns={'addtime':'注册时间','usertime':'用户数量'},inplace=True)
data['注册时间']=pd.to_datetime(data['注册时间'])
data=data.set_index('注册时间',drop=True)
data=data['2018-04-01':'2018-04-30']
df=data.resample("D").size().to_period("D")
'''
注意这时不能用sum(),sum()只能机械的把上面的加到下面
此时我们需要的是计数,那就是size(),row_number()那样的
而如果此时值是数值型的?
就不能再用size(),而必须使用sum()
'''
df.to_excel('result1.xlsx')
x=pd.date_range(start='2018-04-01',periods=30)
y=df#---------------可视化——————————————————————————————————————
sns.set_style('darkgrid')
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.title('网站4月份每天新增用户趋势图')
plt.plot(x,y)
plt.xticks(fontproperties = 'Times New Roman', size = 8,rotation=20)#X轴字体大小
plt.xlabel('时间')
plt.ylabel('新增用户数')
plt.show()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

discuz html5 手机,Discuz正式推出移动端社区建站工具Discuz Q

从黯然离场到二次上线,Discuz近期正式上线移动端社区建站软件Discuz Q,鼎力支持站长专属私域流量经营!了解到,Discuz! Q简单讲就是一套手机端的社区建站软件,核心就是帮助站长经营移动端私域流量,快速内容变现 &#x…

微信网站防屏蔽防红的措施以及微信域名检测API等工具的技术原理

为什么关心这种技术?因为我经常听到身边搞微商、搞微信项目的朋友都在叫苦连天,由于微信域名屏蔽、微信域名被拦截、弄得他们尸横遍野,损失的连过年回家的路费都没了,曾经的叱咤风云一下变成了今日的倒亏损。腾讯对微信中推广活动…

数字藏品交易平台开发 数字藏品交易网站开发

“数字藏品是运用电子信息技术促进文化艺术,尤其是传统式文化创意产业概率界限的移位,是推动文化创意产业使用价值和价值活起來的媒介。"12月21日,河北省博物院副院长赵志良在“用数赋智推动中华文化艺术创造力转换、创新能力发展趋势&q…

区块链nft网站开发 NFT数字藏品网站开发

虽然NFT自从2017年以来一直存在,NFT他们最初被用于加密社区内的边缘例(收集加密猫)。然而四年了,我们见证了艺术家,设计师,游戏开发者,音乐家和作家对这项技术的采用,在DEFI出现之前…

java中添加音乐_[Java教程]如何在网站中添加音乐

[Java教程]如何在网站中添加音乐0 2014-10-19 17:00:42来源:http://www.ido321.com/1042.html发现有很多的个人博客中添加了背景音乐,以增强用户体验。LZ搜集到了两种在网站中添加音乐的方式。一、豆瓣的FM这个非常简单,一段代码就可以实现。…

藏头诗php网站源码,四、中英翻译、歌词、藏头诗、智能聊天

中英翻译、歌词、藏头诗、智能聊天此章接口都来源于:http://api.ajaxsns.com/ ,感谢作者的无私奉献。先看效果图代码如下:1、共同方法private function _ajaxsns_comm($msg){$paramarray("key" > "free","appid" > "0","ms…

3.在Visual Studio 2017 下创建ASP.NET网站程序

1.文件——新建——项目 2.在新弹出来的窗口上选择Visual C#,然后选择ASP.NET Web 应用程序(.NET Framework),然后点击确定 这里要注意下面的名称,位置,方案名称,需要改的就改了吧,新手还是一切…

存储过程可重用的代码块_GitHub推出新功能Actions,直接网站上构建、共享和执行代码...

​【新智元导读】GitHub推出了一个新版本的GitHub Actions测试版,内置了持续集成和交付功能。GitHub表示,它现在拥有4000多万用户。GitHub Actions是一个用于GitHub的因果关系的API,即基于任何事件协调任何工作流,与此同时GitHub负…

网页左侧导航栏点击怎么显示右侧内容_网站导航条应该怎么设计才比较易用

企业在做网站建设的时候需要,导航条是一个关键部分,一个明了易用的网站导航条能让用户在浏览网站的时候快速明确找到自己想要的页面,相当于网站的指路牌,所以导航条需要重点设计。那么如何才能设计出简单易用的网站导航条呢&#…

博文视点大讲堂41期-SEO难点之网站内部链接结构

博文视点大讲堂41期 SEO难点之网站内部链接结构 SEO是什么? 虽然这些年SEO概念普及了,但在很多人眼里,SEO和作弊、欺骗是一回事儿。这是对SEO的极大误解。 SEO是个强有力的工具,能以很合理的方式进行,既照顾到用户需求…

java setaccessible_「accessible」Java反射中的setAccessible()方法是否破坏了类的访问规则 - seo实验室...

accessiblejava反射机制提供的setaccessible()方法可以取消Java的权限控制检查,下面展示了这种方法的使用。package test;import java.lang.reflect.field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;class A {private i…

宝塔Linux301重定向,宝塔面板如何做网站301重定向跳转

网站301重定向对于我们日后做SEO还是挺重要的,它是指是一条对网站浏览器的指令,来显示浏览器被要求显示的不同的URL,当一个网页经历过其URL的最后一次变化以后时使用。一个永久定向是一种服务器端的重定向,能够被搜索引擎蜘蛛适当…

服务器运行堵塞 负载%100,小白站长如何快速了解网站服务器的运行状况

我们的网站服务器预装系统:CentOS Linux 7.6.1810 (Core)。对于小白站长来讲,因为宝塔管理面板是现在非常流行的一款免费的Windows/Linux管理应用,所以服务器安装这个应用,并安装Nginx -Tengine2.2.3运行环境,其可视化操作界面&am…

php课设源代码网站,php精品课程教学网站在线发布系统

功能需求3.3.1 学生部分1:课程展台:为学生提供课程操作平台。1) 课程简介:显示课程的基本情况的介绍;2) 教学大纲:显示课程的教学大纲内容;3) 授课计划:显示课程的授课计划;4) 备课教…

linux保险箱软件,360保险箱的保护功能 - 不怕盗号木马 奇虎360保险箱抢鲜试用(组图)_Linux安全_Linux公社-Linux系统门户网站...

360保险箱的保护功能二、360保险箱的保护功能保护功能是360保险箱的主要功能,在保护功能下共有“安全启动”、“正在保护”、“保护历史”三个标签。在安全启动这一项上,对应的程序类型有“聊天工具”、“网络游戏”、“网络银行”三种类型。其中聊天工具…

论文网站

从cvchina上看到的,转载自demonstrate 的 blog 自己稍作补充。这里搜集了一些常见的和 machine learning 相关的网站,按照 topic 来分。 Active Learning http://active-learning.net/,这里包括了关于Active Learning理论以及应用的一些文章&…

网站服务器保存多久,云服务器保存多久

云服务器保存多久 内容精选换一换符合条件的华为云弹性云服务器,均可享受不超过 30 天的赠送时长奖励。“备案多久送多久”具体规则如下:您办理备案的须为包年/包月计费的华为云弹性云服务器,且每台弹性云服务器仅限享受本规则规定的赠送时长…

服务器后台设计与大型网站设计,「大型网站架构设计」—— 前言

嘿,笔者的个人博客已经孵化完成啦🐣,欢迎大家来逛逛。以后的文章也会在博客进行首发,快来关注我吧,我们继续一起探讨技术一同进步~本文主要是笔者对《大型网站技术架构》一书的总结归纳。主要通过两种方式展现&#xf…

JSP网站开发基础总结《九》

本篇属于附加篇,在之前的总结中给大家提到过一个关于登录状态验证的效果,当时是通过Session对象完成的,今天我查了一下,JSP为我们封装了一个用于过滤用的过滤器类Filter,通过它我们就可以非常轻松的完成之前的那个功能…

Jenkins 传统网站更新和CI/CD概念

门户网站传统部署流程 基于线上CentOS服务器,构建了一套LAMP(LNMP)PHP WEB环境,发布了Discuz门户网站代码,通过浏览器访问WEB网站,如图所示: [rootlocalhost ~]# yum install httpd php php-de…