Matplotlib数据可视化基础pandas统计分析基础

1.分析1996~2015年人口数据特征间的关系。

 

人口数据总共拥有6个特征,分别为年末人口、男性人口、女性人口、城镇人口、乡村人口和年份。查看各个特征随着时间推移发生的变化情况可以分析出未来男女人口比例、城乡人口变化方向。

(1)使用NumPy库读取populations.nzp人口数据。

(2)创建画布,并添加子图。

(3)在两个子图上分别绘制散点图和折线图。

(4)保存,显示图片

(5)分析未来人口变化趋势。

源程序

import numpy as np
import matplotlib.pyplot as plt
data=np.load('C:/Users/Administrator/Desktop/上机2/populations.npz', allow_pickle=True)
print(data.files)
print(data['data'])
print(data['feature_names'])

plt.rcParams['font.sans-serif']='SimHei' #设置中文显示
name=data['feature_names']
values=data['data']
p1=plt.figure(figsize=(15,15))
pip1=p1.add_subplot(2,1,1)#创建一个2行1列的子图,并开始绘制第一幅
plt.scatter(values[0:20,0],values[0:20,1],marker='+',color='pink')
plt.scatter(values[0:20,0],values[0:20,2],marker='o',color='yellow')
plt.scatter(values[0:20,0],values[0:20,3],marker='D',color='green')
plt.scatter(values[0:20,0],values[0:20,4],marker='P',color='red')
plt.scatter(values[0:20,0],values[0:20,5],marker='s',color='blue')
plt.xlabel('时间');plt.ylabel('总人口(万人)')
plt.xticks(values[0:20,0])
plt.title("1996~2015年人口数据特征间散点图")
plt.legend(['年末','男性','女性','城镇','乡村'])
plt.savefig("C:/Users/Administrator/Desktop/上机2/1996~2015年人口数据特征间散点图.png")
plt.show()

p1=plt.figure(figsize=(15,15))
pip1=p1.add_subplot(2,1,2)#创建一个2行1列的子图,并开始绘制第一幅
plt.plot(values[0:20,0],values[0:20,1],'r-')
plt.plot(values[0:20,0],values[0:20,2],'b-')
plt.plot(values[0:20,0],values[0:20,3],'y--')
plt.plot(values[0:20,0],values[0:20,4],'k--')
plt.plot(values[0:20,0],values[0:20,5],'r:')
plt.xlabel('时间');plt.ylabel('总人口(万人)')
plt.xticks(values[0:20,0])
plt.title("1996~2015年人口数据特征间折线图")
plt.legend(['年末','男性','女性','城镇','乡村'])
plt.savefig("C:/Users/Administrator/Desktop/上机2/1996~2015年人口数据特征间折线图.png")
plt.show()

结果截屏

分析未来人口变化趋势:

根据各个特征随着时间推移发生的变化情况可以分析出未来男女人口比例将逐渐趋于平衡状态,城乡人口变化方向将逐渐城镇化。

2. 读取并查看用户信息更新表的基本信息。

(1)使用ndim、shape、memory_usage属性分布查看维度、大小、占用内存信息。

(2)使用describe方法进行描述性统计。

源程序

import pandas as pd
Userupdate=pd.read_csv('C:/Users/Administrator/Desktop/上机2/Training_Userupdate.csv',encoding='gbk')
print("1、用户更新表的维度为:",Userupdate.ndim)
print("2、用户更新表的大小为:",Userupdate.shape)
print("3、用户更新表占用内存信息为:",Userupdate.memory_usage().head())
print("3、用户更新表的描述性统计为:",Userupdate.describe())

结果截屏

3.提取登录信息表的时间信息。

(1)使用to_datetime函数转换登录信息表的时间字符串。

(2)使用year、month、week等方法提取登录信息表中的时间信息。

(3)计算登录信息表中两时间的差,分别以日、消失、分钟计算。

(4)使用groupby方法对登录信息表进行分组。

(5)使用agg方法求取分组后的最早和最晚登录时间。

(6)使用size方法求取分组后的数据的的信息登录次数。

源代码

import pandas as pd
LogInfo=pd.read_csv('C:/Users/Administrator/Desktop/上机2/Training_LogInfo.csv',encoding='gbk')
print("使用to_datetime函数转换登录信息表的时间字符串:\n",LogInfo['Listinginfo1'])
Userupdate["ListingInfo1"]=pd.to_datetime(Userupdate["ListingInfo1"])
Userupdate["UserupdateInfo2"]=pd.to_datetime(Userupdate["UserupdateInfo2"])
LogInfo["Listinginfo1"]=pd.to_datetime(LogInfo["Listinginfo1"])
LogInfo["LogInfo3"]=pd.to_datetime(LogInfo["LogInfo3"])
year=[i.year for i in LogInfo['Listinginfo1']]
print("Listinginfo1中的年份数据前5个为:",year[:5])
month=[i.month for i in LogInfo['Listinginfo1']]
print("Listinginfo1中的月份数据前5个为:",month[:5])
week=[i.day for i in LogInfo['Listinginfo1']]
print("Listinginfo1中的星期数据前5个为:",week[:5])
timeDelta=LogInfo['Listinginfo1']-LogInfo['LogInfo3']
print("计算时间差以日期为单位:\n",timeDelta.head())

def TransformDayIntoHour(data):
    for i in range(0,len(data)):
        data[i]=data[i].total_seconds()/3600
    return data
print("计算时间差以小时为单位:\n",TransformDayIntoHour(timeDelta).head())

def TransformDayIntoMinute(data):
    for i in range(0,len(data)):
        data[i]=data[i].total_seconds()/60
    return data 
timeDelta=Userupdate["ListingInfo1"]-Userupdate["UserupdateInfo2"]
print("计算时间差以分钟为单位:\n",TransformDayIntoMinute(timeDelta).head())
UserupdateGroup=Userupdate[["Idx","UserupdateInfo2"]].groupby(by="Idx")
LogInfoGroup=LogInfo[["Idx","LogInfo3"]].groupby(by="Idx")
print('分组后的用户信息更新表为:',UserupdateGroup.head())
print('分组后的登录信息表为:',LogInfoGroup.head())
print("分组后最早更新时间:",UserupdateGroup.agg(np.min).head())
print("分组后最晚更新时间:",UserupdateGroup.agg(np.max).head())
print("分组后信息更新次数:",UserupdateGroup.size().head())
print("分组后登录次数:",LogInfoGroup.size().head())

 运行截图

4.读取数据库meal_order_detail1.sql数据,使用透视表、交叉表进行分析。

(1)创建单日菜单品成交总额与总数均价透视表。

(2)创建单个菜品单日成交总额透视表。

源代码

import pandas as pd
import numpy as np
from sqlalchemy import create_engine
engine=create_engine('mysql+pymysql://root:1234@localhost:3306/testdb?charset=utf8')
detail=pd.read_sql_table('meal_order_detail1',con=engine)
detail['place_order_time']=pd.to_datetime(detail['place_order_time'])
detail['date']=[i.date() for i in detail['place_order_time']]
PivotDetail=pd.pivot_table(detail[['date','dishes_name','counts','amounts']],
index='date',aggfunc=np.sum,margins=True)
print('单日菜单品成交总额与总数均价透视表:\n',PivotDetail.head())
CrossDetail=pd.crosstab(index=detail['date'],columns=detail ['dishes_name'],values=detail['amounts'],aggfunc=np.sum,margins=True)
print('单个菜品单日成交总额透视表:\n',CrossDetail.iloc[-5:,-5:])

 运行截图

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值