2Python数据分析基础 > > > > > > > > > >
--------------------------------------------------> 1.Python初体验
示例1:用print输出单个文本
要求
打印以下语句:
我的第一行程序
参考答案:
代码模板
print('我的第一行程序')
示例2:print-输出多个文本
要求
依次输出多个文本:“销售额为”,“10000”,“元”
参考答案:
代码模板
print("销售额为","10000","元")
示例3:输出数字或者计算结果
要求
依次输出数字或者计算结果:“299-100”,“=”,“199”
参考答案:
代码模板
print('299-100','=',299-100)
示例4:单行注释
要求
打印以下语句:
我的第一行程序
并为代码添加单行注释,注释内容如下:
这是我的第一行程序
参考答案:
代码模板
①注释在代码的前一行
# 这是我的第一行程序
print('我的第一行程序')
②注释在代码的右侧
print('我的第一行程序') # 这是我的第一行程序
示例5:多行注释
要求
打印以下语句:
我的第一行程序
并为代码添加多行注释,注释内容如下:
这是一个单引号示例
让计算机输出这句话
我的第一行程序
参考答案:
代码模板
'''
这是一个单引号示例
让计算机输出这句话
我的第一行程序
'''
print('我的第一行程序')
示例6:变量
要求
打印以下语句:
连衣裙的单价为1000元
输出金额通过变量赋值。
参考答案:
代码模板
# 创建一个变量接收单价
price = 1000
#打印语句
print('连衣裙的单价为',price,'元')
示例7:input()函数
要求
打印以下语句:
1月份销售额为 *** 元
输出金额为用户输入的数字
参考答案:
代码模板
#创建变量接收输入的销售额
sales=(input("请输入销售额"))
#打印销售额
print("1月份销售额为",sales,"元")
#金额输入10000然后按下回车
--------------------------------------------------> 2.数据类型-数值
示例1:算数运算符
要求
2020年,某银行公布贷款月利率为0.3625%,某公司向该银行贷款1000000元,贷款时间为一个月,约定到期一次还本付息。
请运用算数运算符,计算并打印此公司到期应付的利息以及到期还款额。
参考答案:
代码模板
# 创建一个变量接收贷款额
贷款额 = 1000000
# 创建一个变量接收月利率
月利率 = 0.003625
# 创建一个变量期限
期限 = 1
# 计算应付利息
应付利息 = 贷款额 * 月利率*期限
还款额 = 贷款额 + 应付利息
# 打印计算结果
print('应付利息=',应付利息)
print('还款额=',还款额)
示例2:赋值运算符
要求
公司某商品本年前三个季度的累计销售量为70000个,第四季度销售量为25000个。
请运用赋值运算符,计算并打印该商品本年四季度的累计销售量。
参考答案:
代码模板
# 创建一个变量numb接收第四季度销售量
numb = 25000
# 创建一个变量cumulativeNumb接收前三个季度累计销售量(cumulativeNumb第一次赋值)
cumulativeNumb = 70000
# 计算累销售量(cumulativeNumb第二次赋值)
cumulativeNumb += numb
# 打印本年累计销售量
print(cumulativeNumb)
示例3:比较运算符
要求
某商场普通键盘售价为200元,本年销量为2000个;机械键盘售价为500元,本年销量为1200台。
请判断普通键盘本年销售额是否大于机械键盘本年销售额。
参考答案:
代码模板
# 创建一个变量income1接收普通键盘本年销售额
income1 = 200*2000
# 创建一个变量income2接收机械键盘本年销售额
income2 = 500*1200
# 比较income1是否大于income2,并输出比较结果
print(income1>income2)
示例4:逻辑运算符
要求
某商场在元旦期间针对商场的会员进行优惠促销活动,会员单次消费金额超过1000元,并且会员积分超过20000分赠送电磁炉一台。
某会员单次消费级金额为1300元,会员积分17000分。判断他能否获得电磁炉。
参考答案:
代码模板
#创建一个变量接收单次消费金额
单次消费金额 = 1300
#创建一个变量接收会员积分
会员积分 = 17000
#判断该会员是否获得电磁炉,并输出结果
print(单次消费金额>1000 and 会员积分>20000)
示例5:运算优先级
要求
分别计算一下表达式的值:
47+243/9**2
(8 +10)*3+96/3
(True or False) +1
参考答案:
代码模板
# 先计算9**2=81,再计算243/81=3,再计算47+3=50
print(47+243/9**2)
# 括号优先(8 +10)结果为18,再计算18*3为54,再计算96/3=32,再计算54+32=86
print((8 +10)*3+96/3)
# 先计算(True or False)结果为True,再计算True+1结果为2
print((True or False) +1)
--------------------------------------------------> 3.数据类型-字符串
示例1:转义字符
要求
打印’1月份销售报表’
参考答案:
代码模板
#方法①:使用转义字符
print('打印\'1月份销售报表\'')
#方法②:当遇到字符串中有单引号时使用双引号作为标识
print("打印'1月份销售报表'")
示例2:转义字符-r
要求
打印文件路径D:\note\student\rule
参考答案:
代码模板
#打印文件路径
print(r'D:\note\student\rule')
示例3:转义字符-三引号换行符
要求
打印以下形式语句:
商品售价
进货成本
销售毛利
参考答案:
代码模板
print('商品售价\n进货成本\n销售毛利')
print('''商品售价
进货成本
销售毛利''')
示例4:字符串操作
要求
使用函数清除字符串s中的“¥”,并打印字符串。
s = ‘’‘淘宝店5月销售额为:¥200万元
天猫店5月销售额为:¥100万元
京东店5月销售额为:¥130万元’’’
参考答案:
代码模板
s = '''淘宝店5月销售额为:¥200万元
天猫店5月销售额为:¥100万元
京东店5页销售额为:¥130万元'''
# 调用函数清除“¥”
s = s.replace('¥','')
# 输出字符串
print("销售额",s)
示例5:字符串格式化
要求
分别%占位符、格式化函数format()方法、F-strings打印以下固定格式语句:
我叫XX,今年XX岁
参考答案:
代码模板
print("我叫%s,今年%d岁!"%('小明',10))
print("我叫{},今年{}岁!".format('小明',10))
print(f"我叫{'小明'},今年{10}岁!")
示例6:字符串格式化
要求
分别使用%占位符、格式化函数format()方法、F-strings打印以下固定格式语句:
本年XX月份XX指标是XX元
参考答案:
代码模板
print('本年%d月份%s指标是%.2f元'%(10,'销售额',300000))
print('本年{}月份{}指标是{}元'.format(10,'销售额',300000))
print(f'本年{10}月份{"销售额"}指标是{300000}元')
--------------------------------------------------> 4.高级数据类型
示例1:列表
要求
SWOT分析法包括:S优势、W劣势、O机会、T威胁。
1、创建一个列表存储 SWOT分析法包含的内容;
2、使用成员运算符“in”判断“P产品”是否属于SWOT分析法的内容。
参考答案:
代码模板
# 创建一个列表存储存 SWOT分析法包含的内容
SWOT = ['S优势','W劣势','O机会','T威胁']
# 成员运算符
'P产品' in SWOT
示例2:元组
要求
tup1=(‘淘宝店铺,双十一销售额100万’)
请将元组中“淘宝店铺”,改为“京东店铺”
参考答案:
代码模板
tup1=('淘宝店铺','双十一销售额100万')
# 修改元组元素操作是非法的
tup1[0] = '京东店铺'
示例3:字典
要求
大伟箱包旗舰店是一家专营各类箱包的店铺,公司现有三款热销产品分别是双肩背包、单肩背包及传统拉杆箱,价格分别为289元,199元,548元,创建字典保存商品及价格数据。
为迅速铺开市场,推出新产品无拉杆旅行箱,销售单价为499元/个。并拟将传统拉杆箱产品提升至599元,请根据变动情况更新字典。
产品名称 单价(元) 备注
双肩背包 289 现有产品
单肩背包 199 现有产品
传统拉杆箱 548 现有产品(需调价)
无拉杆旅行箱 499 新推出产品
参考答案:
代码模板
# 创建字典
d = {'双肩背包':289,'单肩背包':199,'传统拉杆箱':548}
# 增加新产品无拉杆旅行箱
d['无拉杆旅行箱'] = 499
# 修改传统拉杆箱单价
d['传统拉杆箱'] = 599
# 打印字典
print(d)
--------------------------------------------------> 5.流程控制-条件判断
示例1:单分支选择结构
要求
北京印象城广场开业期间将进行线下促销活动,活动内容为若单次消费金额达到1000元,整单享受8折优惠。否则不享受优惠政策。
本次顾客单次消费1200元,要求计算顾客应支付金额。
参考答案:
代码模板
#创建变量接收顾客消费金额
spend = 1200
#条件判断语句
if spend >= 1000:
print(spend*0.8)
else:
print(spend)
示例2:多分支选择结构
要求
北京印象城广场开业期间将进行线下促销活动,活动内容为若单次消费金额达到1000元,整单享受8折优惠。单次消费金额达到500元但小于1000元,整单享受9折优惠,否则不享受优惠政策。
本次顾客单次消费800元,要求计算顾客应支付金额。
参考答案:
代码模板
#创建变量接收顾客消费金额
spend = 800
#条件判断语句
if spend >= 1000:
print(spend*0.8)
elif spend >= 500:
print(spend*0.9)
else:
print(spend)
示例3:if嵌套
要求
电商大促:北京印象城广场开业期间将进行线下促销活动,本次活动只针对会员顾客,活动内容为会员顾客若单次消费金额达到1000元,整单享受8折优惠。会员顾客单次消费金额达到500元但小于1000元,整单享受9折优惠,否则不享受任何优惠政策。
使用input()函数接收顾客是否为会员,本次会员顾客单次消费800元,要求计算顾客应支付金额。
参考答案:
代码模板
#创建变量
spend = 800
VIP=input("是否为会员,请输入 是 否")
#if嵌套
if VIP == "是":
if spend >= 1000: #条件判断是否>=1000
print(spend*0.8)
elif spend >= 500: #条件判断是否>=500
print(spend*0.9)
else:
print(spend)
else:
print(spend)
--------------------------------------------------> 6.流程控制-循环语句
示例1:While循环(出库单打印)
要求
爱琴海时装旗舰店在双十一活动期间进行了促销活动,仓库管理部门负责仓库发货及出库单打印。请用循环函数打印出库信息。
时尚女装连衣裙库存量为10,请使用while循环打印每件衣服出库信息。
参考答案:
代码模板
i = 1 #初始表达式
while i <= 10: #条件判断库存为10件
print("第",i,"件产品,可正常出库")
i += 1 #更新表达式
print("库存不够,无法发货")
示例2:While循环(收银系统登录)
要求
爱琴海时装旗舰店使用客如云收银系统,使用收银系统时需要正确的输入账号密码进行登录,用户有三次输入账号和密码的机会,输入正确会显示“登录成功”;错误则提示“密码错误!你还有*次机会”,三次都是错误则提示“密码错误!账户已被锁定”。
请使用while循环实现客如云收银系统登录提示。
参考答案:
代码模板
time=0 #初始表达式
while time<3: #判断条件
user=input("请输入账户名:")
passwd=input("请输入密码:")
if (user =="python")and(passwd =="123456"):
print("登录成功")
break #循环结束语句
else:
if time<2:
print("密码错误!你还有%d次机会"%(2-time))
else:
print("密码错误!账户已被锁定")
time += 1 #更新表达式
示例3:for循环(出库单打印)
要求
爱琴海时装旗舰店在双十一活动期间进行了促销活动,仓库管理部门负责仓库发货及出库单打印。请用循环函数打印出库信息。
时尚女装连衣裙库存量为10,请使用for循环打印每件衣服出库信息。
参考答案:
代码模板
for i in range(1,11):
print("第",i,"件产品,可正常出库")
print("库存不够,无法发货")
示例4:for循环(收银系统登录)
要求
爱琴海时装旗舰店使用客如云收银系统,使用收银系统时需要正确的输入账号密码进行登录,用户有三次输入账号和密码的机会,输入正确会显示“登录成功”;错误则提示“密码错误!你还有*次机会”,三次都是错误则提示“密码错误!账户已被锁定”。
请使用while循环实现客如云收银系统登录提示。
参考答案:
代码模板
for time in range(3):
user=input("请输入账户名:")
passwd=input("请输入密码:")
if (user =="python")and(passwd =="123456"):
print("登录成功")
break #循环结束语句
else:
if time < 2:
print("密码错误!你还有%d次机会"%(2-time))
else:
print("密码错误!账户已被锁定")
示例5:for循环(出库单打印)
要求
爱琴海时装旗舰店在双十一活动期间进行了促销活动,仓库管理部门负责仓库发货及出库单打印。请用循环函数打印出库信息。
时尚女装连衣裙库存量为10,出库时发现第五件污损无法正常发货,请使用for循环,打印每件衣服出库信息。
参考答案:
代码模板
for i in range(1,11): #条件判断库存为10件
if i==5:
print("第",i,"件产品,污损无法出库")
continue
print("第",i,"件产品,可正常出库")
print("库存不够,无法发货")
--------------------------------------------------> 7.Python函数应用
示例1:自定义函数
①要求
自定义func1函数,实现任意两个数字求和。
②要求
自定义func2函数,比较两个数值并输出较大值。
参考答案:
①要求
自定义func1函数,实现任意两个数字求和。
代码模板
# 两个数求和
def func1(a,b):
c=a+b
return c
# 调用函数
func1(100,299)
示例2:函数参数(位置参数)
要求
使用自定义函数,进行商品售价求和
参考答案:
代码模板
# 自定义函数,商品售价求和
def calc(商品1价格,商品2价格):
return(商品1价格+商品2价格)
# 调用函数
calc(299,839)
示例3:函数参数(默认参数)
要求
使用自定义函数,进行商品售价求和。提前给商品2一个价格299元,然后调用函数。
参考答案:
代码模板
# 自定义函数,商品售价求和
def calc(商品1价格,商品2价格=299):
return(商品1价格+商品2价格)
# 调用函数
print(calc(190)) #只输入1个值
print(calc(190,839)) #输入2个值
示例4:匿名函数和三元运算符
要求
北京印象城广场开业期间将进行线下促销活动,活动内容为若单次消费金额达到1000元,整单享受8折优惠。否则不享受优惠政策。
本次顾客单次消费1200元,要求计算顾客应支付金额,使用匿名函数和三元运算符实现代码。
参考答案:
代码模板
#使用匿名函数和三元运算符
(lambda x :x*0.8 if x >= 1000 else x )(1200)
示例5:第三方库-函数
要求
引入matplotlib.pyplot第三方库-函数,绘制一条直线。
参考答案:
代码模板
import matplotlib.pyplot as plt #引入绘图函数
plt.plot(range(5)) #绘制一条直线
示例6:第三方库-函数引入方式
要求
一、直接引入模块
二、from 模块 import 函数
参考答案:
一、直接引入模块
代码模板
# 直接引入模块
import random
# 想要调用random包中的函数,需要使用 random.函数名的方式来调用,不能直接调用
print(random.random())
二、from 模块 import 函数
代码模板
# 引入模块中的所有函数
from random import *
# 这时候的函数可以直接引用,就不再需要 random.函数名来使用了
print(random())
3数据采集与网络爬虫 > > > > > > > > > >
--------------------------------------------------> 2.采集流程-发送请求与获取内容
示例1:通过requests.get()请求爬取云南神农农业产业集团股份有限公司-主要财务指标
要求
通过requests.get()请求爬取新产教大数据中心(云南神农农业产业集团股份有限公司-主要财务指
标),要求先返回状态码,然后查看响应内容。
URL:https://oss.xinchanjiao.com/bigdata/company/2021/csv/cwbbzy_605296.csv
参考答案:
代码模板
# 引入requests库
import requests
#发送请求(爬取“云南神农农业产业集团有限公司的主要财务指标”)
r=requests.get('https://oss.xinchanjiao.com/bigdata/company/2021/csv/cwbbzy_605296.csv')
#检测请求的状态码
print("返回的状态码:",r.status_code)
#header中猜测的响应内容编码方式
print("header中猜测编码方式:",r.encoding)
#内容中分析出的响应内容编码方式
print("内容中分析的编码方式:",r.apparent_encoding)
#更换解码方式
r.encoding=r.apparent_encoding
r.text
示例2:爬取京东商城某店铺页面苹果所有信息
要求
尝试通过requests.get()请求爬取京东商城某店铺页面苹果所有信息。
URL:https://item.jd.com/10030890716442.html
参考答案:
代码模板
#引入requests库
import requests
r=requests.get("https://item.jd.com/100308907
16442.html")
#检测请求的状态码
print("返回的状态码:",r.status_code)
#变换编码方式
r.encoding=r.apparent_encoding
print(r.text[:500])
示例3:爬取亚马逊平台“Champion 网眼帽”商品信息
要求
尝试通过requests.get()请求方法爬取亚马逊平台“Champion 网眼帽”商品信息
URL:https://www.amazon.cn/dp/B078K5FXZV/ref=lp_1759032071_1_6
参考答案:
代码模板
import requests #引入requests库
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0;
Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/96.0.4664.45 Safari/537.36'}
r=requests.get("https://www.amazon.cn/dp/B078K5FXZ
V/ref=lp_1759032071_1_6",headers =headers )
#检测请求的状态码
print("返回的状态码:",r.status_code)
#变换编码方式
r.encoding=r.apparent_encoding
print(r.text[500000:530000])
--------------------------------------------------> 3.采集流程-解析内容与保存数据
示例1:XPath解析
要求
爬取京东商城搜索“烟台苹果”后首页展示的所有店铺的“店铺名称”和“商品价格”,采用XPath进行解析。
URL:https://search.jd.com/Search?keyword=烟台苹果&enc=utf-8&pvid=b41e02073b39402f96f74c92e51e2fab
参考答案:
代码模板
#引入所需要的库
import requests
from lxml import etree
import pandas as pd
#设置头信息进行绕过反爬
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}
#发送请求
resp = requests.get("https://search.jd.com/Search?keyword=烟台苹果&enc=utf-8&pvid=b41e02073b39402f96f74c92e51e2fab",headers=headers)
html = resp.content.decode()
element = etree.HTML(html)
#店铺
name = element.xpath('//*[@id="J_goodsList"]/ul/li/div/div[5]/span/a/text()')
#金额
pay = element.xpath('//*[@id="J_goodsList"]/ul/li/div/div[2]/strong/i/text()')
#查看结果
a =list(zip(name,pay))
df=pd.DataFrame(a,columns=['店铺','金额'])
df
示例2:新建TXT文件
要求
新建TXT文件,每行写一个平台名称,平台名称为“淘宝、拼多多、京东、苏宁”。
参考答案:
代码模板
# 新建txt文件
f=open(r"./电商平台.txt",'w',encoding ='utf-8')
#写入的字符串 及 换行符
f.write('主流电商平台\n淘宝\n拼多多\n京东\n苏宁')
f.close()
--------------------------------------------------> 4.站内数据采集及综合案例
示例1:站内数据采集
要求
登录财务大数据中心,使用自定义爬虫函数爬取“农林牧渔”所有上市公司股票代码及相关信息,并将爬取数据保存为json文件,文件名为“农林牧渔.json”。
参考答案:
代码模板
# 引入库
import requests
# 自定义爬虫函数
def spider(url,filename):
try:
r = requests.get(url,timeout=6)
r.raise_for_status() # 专门与异常打交道的方法
r.encoding = r.apparent_encoding
if(filename.endswith("xls") or filename.endswith("xlsx")):
with open(filename,'wb') as f: # 保存数据
f.write(r.content)
else :
with open(filename,'w',encoding='utf-8') as f: # 保存数据
f.write(r.text)
return print('文件:',filename,'下载成功!')
except:
return print('文件下载失败!')
# 调用爬虫函数输入URL及文件名称
spider('https://oss.xinchanjiao.com/bigdata/company/2021/list/hy001000.json','农林牧渔.json')
4数据处理与加工 > > > > > > > > > >
--------------------------------------------------> 1.数据处理综述
示例1:NumPy的引用
要求
导入NumPy库,生成0到5的数组。
参考答案:
代码模板
#导入NumPy库
import numpy as np
#生成0到5的数组
x = np.arange(5)
#打印数组
print (x)
示例2:创建数组1
要求
用列表类型和元组类型创建数组, 创建方法:numpy.array(list/tuple)。
参考答案:
代码模板
#导入numpy库
import numpy as np
#列表类型创建数组
a=np.array([0,1,2,3])
print(a)
示例3:创建数组2
要求
使用arange函数创建数组,创建方法: numpy.arange(start, stop, step, dtype=None)
参考答案:
代码模板
#导入numpy库
import numpy as np
#使用numpy中arange方法,设置起始值10、终止值20,步长2
c = np.arange(10,20,2)
print(c)
示例4:NumPy的随机函数
要求
①利用rand函数,生成[0,1)范围内的一个浮点随机数。
②利用rand函数,生成[0,1)范围内的一维数组的浮点随机数。
③利用rand函数,生成[0,1)范围内的二维数组的浮点随机数。
参考答案:
①利用rand函数,生成[0,1)范围内的一个浮点随机数。
代码模板
#导入numpy库,取名np
import numpy as np
#默认d0 = 1, 产生[0, 1)范围内的一个浮点随机数
a = np.random.rand()
print(a)
示例5:NumPy的常用统计函数
要求
利用NumPy统计函数计算数组元素最大值与最小值。
参考答案:
代码模板
#导入numpy库
import numpy as np
#创建数组
a=np.array([0,1,2,3,4,5,6,7,8])
#求最大值、最小值
print(np.max(a))
print(np.min(a))
--------------------------------------------------> 2.Pandas数据结构
示例1:Pandas库的引用
要求
Pandas库引用,做一个小测试定义一个变量a
参考答案:
代码模板
#引入Pandas库
import pandas as pd
#做一个小测试,定义一个变量a
a=pd.Series(range(10))
a
示例2:Series数据类型
要求
创建列表a=[1,2,3],将a转换为Series数据类型。
参考答案:
代码模板
#引入Pandas库
import pandas as pd
#创建列表a
a = [1, 2, 3]
#将a转换为Series
se = pd.Series(a)
print(se)
示例3:数据类型转换
要求
将Python列表[8,9,10]创建Series数据类型
参考答案:
代码模板
#引入Pandas库
import pandas as pd
#创建Series
b=pd.Series([8,9,10])
b
示例4:Series数据类型创建
要求
将Python列表[8,9,10]创建Series数据类型,并自定义索引列为[‘a’,‘b’,‘c’]。
参考答案:
代码模板
#引入Pandas库
import pandas as pd
#创建Series
b=pd.Series([8,9,10],index=['a','b','c'])
b
示例5:二维列表创建DataFrame
要求
通过二维列表创建DataFrame
image.png
参考答案:
代码模板
#引入pandas
import pandas as pd
#创建二维列表
data=[['2022年1月',379,3400,320],
['2022年2月',369,2514,261],
['2022年3月',398,2856,292]]
#创建DataFrame
df=pd.DataFrame(data,columns=['日期','JJF销售量','WZ销售量','CP销售量'],index=range(1,4))
df
示例6:字典创建DataFrame
要求
通过字典创建DataFrame
image.png
参考答案:
代码模板
#引入pandas
import pandas as pd
#创建字典
data={'日期':['2022年1月','2022年2月','2022年3月'],
'JJF销售量':[397,369,398],
'WZ销售量':[3400,2514,2856],
'CP销售量':[320,261,292]}
#创建DataFrame
df=pd.DataFrame(data,index=range(1,4))
df
示例7:DataFrame与Series的相互转换
要求
上接示例5
①取“JJF销售量”列转换为Series,打印JJF销售量列并查看数据类型;
②将Series转化为DataFrame类型。
参考答案:
①取“JJF销售量”列转换为Series,打印JJF销售量列并查看数据类型;
代码模板
#取'JJF销售量'列转换为Series
a=df['JJF销售量']
#打印该列并查看数据类型
print(a)
type(a)
示例8:DataFrame的简答运算
要求
计算每月份所有品类销售量之和
image.png
参考答案:
代码模板
#引入pandas
import pandas as pd
#计算每月所有品类销售量之和直接对列进行计算
df['总销售量']=df['JJF销售量']+df['WZ销售量']+df['CP销售量']
#查看df
df
示例9:DataFrame常用的基本函数
要求
上接示例7
利用insert()函数,给表格插入一列序号。
参考答案:
代码模板
#插入一列
df.insert(0,'序号',range(1,4))
df
示例10:DataFrame常用的基本函数
要求
上接示例8
利用DataFrame常用的基本函数分别查看前两行和后两行。
参考答案:
代码模板
#查看前2行
df.head(2)
--------------------------------------------------> 3.数据读写
示例1:Excel文件读取
要求
用Pandas来读取 ‘门店销售数据.xlsx’ 文件,并强制将’年’、‘月’、'门店’三列转换为字符串类型。数据读取后,用head()函数,看前几行数据。
读取’门店销售数据.xlsx’的URL地址:
https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx
image.png
参考答案:
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
df=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str})
#显示数据前5行
df.head()
示例2:Excel文件读取2
要求
上接示例1
要求把“门店”设置成索引列,该如何调整代码?
参考答案:
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置年"年"、"月"、"门店"3列转换为字符串类型,并将“门店”列作为索引列。
df=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str},index_col='门店')
#显示数据前5行
df.head()
示例3:计算指标
要求
上接示例2
根据已有数据,来计算每份各家门店计算毛利率。
参考答案:
代码模板
#计算毛利率
df['毛利率']=df['销售毛利']/df['销售收入']
#显示数据前5行
df.head()
示例4:EXCEL文件写入
要求
上接示例3
将处理好的DataFrame导出新Excel,文件名称为’门店销售数据2.xlsx’,表名为’毛利率’
参考答案:
代码模板
#导出新Excel表格,名称'门店销售数据2',表名为'毛利率'
df.to_excel('门店销售数据2.xlsx',sheet_name = '毛利率')
#显示出数据
df
示例5:Excel文件写入2
要求
上接示例4
在原有的 “门店销售数据2.xlsx” 追加sheet_name=‘毛利率2’。
image.png
参考答案:
代码模板
with pd.ExcelWriter('门店销售数据2.xlsx',mode='a') as writer:
df.to_excel(writer,sheet_name='毛利率2')
--------------------------------------------------> 4.数据筛选
示例2:条件筛选
要求
上接示例1
完成以下条件筛选操作。
①通过布尔索引筛选“门店3”的数据;
②通过布尔索引筛选满足当月门店 “销售收入”>=450000元 及 “销售成本”>=300000元 的数据;
参考答案:
①通过布尔索引筛选“门店3”的数据;
代码模板
df[df['门店']=='门店03']
示例3:索引器筛选
要求
上接示例1
通过索引器筛选实现如下操作。
①loc索引器筛选第二行
②loc索引器选取0到3行,“门店”及“销售收入”列组合
③loc索引器选取前3行,“门店”到“销售毛利”列组合
④loc索引器按条件选取“销售毛利” >200000的
⑤iloc索引器按条件选取列满足一定条件的行
⑥loc索引器按条件选取列满足一定条件的行
参考答案:
①loc索引器筛选第二行
代码模板
#loc索引器选取一行
df.loc[2]
--------------------------------------------------> 5.数据特征分析
示例1:描述性统计分析
要求
数据准备: 用Pandas来读取’门店销售数据.xlsx’文件,并强制将’年’、‘月’、'门店’三列转换为字符串类型。数据读取后,可以用head()函数,看前5行数据。
'门店销售数据.xlsx' 的URL地址:
https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx
①统计所有门店的销售收入;
②计算每列最大值;
③describe()函数将所有数值列进行描述性统计;
④返回的describe常见的统计指标中,筛选出“销售成本”的平均值,“销售收入”的最小值。
数据准备代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
df=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str})
#显示数据前5行
df.head()
结果
image.png
参考答案:
①统计所有门店的销售收入
代码模板
#统计所有门店的销售收入
df['销售收入'].sum()
示例2:数据排序
要求
上接示例1
(1)按照索引进行降序排序;
(2)按照销售收入列进行降序排序;
(3)先根据销售毛利降序排序,如销售毛利相同,再根据销售收入升序排序。
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
df=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str})
#显示数据前5行
df.head()
结果
image.png
参考答案:
(1)按照索引进行降序排序
代码模板
#根据索引进行排序:
#axis=0行索引,
#ascending=False代表降序排列
#inplace=True代表直接对df进行修改
#并查看前五行数据
df.sort_index(axis=0,ascending=False,inplace=True)
df.head()
示例3:累积统计
要求
(1)筛选出各家门店一月份(Jan)的数据,根据销售收入降序排列。
(2)使用cumsum计算累计销售收入,赋值给累计销售收入列。
参考答案:
(1)筛选出各家门店一月份(Jan)的数据,根据销售收入降序排列。
代码模板
#筛选月份为一月(Jan)的数据,根据销售收入降序排列
df1 = df.loc[df['月']=='Jan'].sort_values('销售收入',ascending=False)
#查看数据前5行
df1.head()
--------------------------------------------------> 6.数据合并
示例1:merge()合并函数
要求
(1)读取’门店销售数据.xlsx’中Sheet1和Sheet2页签
读取’门店销售数据.xlsx’的URL地址:
https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx
(2)按照年、月和门店合并,以便进行后续销售业务数据分析
参考答案:
(1)读取’门店销售数据.xlsx’中Sheet1和Sheet2页签
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
df1=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name='Sheet1',converters={'年':str,'月':str,'门店':str})
#显示数据前5行
df1.head()
(2)按照年、月和门店合并
代码模板
#Sheet1表为主,左连接数据
#未指定列,以两个DataFrame列名的交集作为连接键
df3=pd.merge(df1,df2,how='left')
df3.head()
示例2:concat()合并函数
要求
上接示例1
使用pd.concat()方式实现如下操作。
(1)df1,df2用concat进行纵向连接
(2)df1,df2,调整axis参数用concat进行横向列连接
参考答案:
(1)df1,df2用concat进行纵向连接
代码模板
#df1,df2用concat进行纵向连接
df4=pd.concat([df1,df2],sort=False)
df4
(2)df1,df2,调整axis参数用concat进行横向列连接
代码模板
#df1,df2,调整axis参数用concat进行横向列连接
df5=pd.concat([df1,df2],axis=1,sort=False)
df5
--------------------------------------------------> 7.数据清洗
示例1:duplicated() 函数查找重复值
要求
使用duplicated() 函数查找并显示数据表中的重复值。
参考答案:
代码模板
#引入库
import numpy as np
import pandas as pd
#读取数据
df=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20221109-780c231e-ec8d-4f7a-a878-15ca651452f7.xlsx')
#查找重复项
df.duplicated()
示例2:返回删除重复行的DataFrame
要求
上接示例1,用drop_duplicates()函数在原数据上删除重复项,并保留第一次出现的重复项。
参考答案:
代码模板
#删除重复项
df.drop_duplicates (inplace=True)
df.head()
示例3:返回删除重复行的DataFrame,并重置索引
要求
上接示例2,用drop_duplicates()函数在原数据上删除重复项,并保留第一次出现的重复项,并重置索引。
参考答案:
代码模板
#删除重复项,并重置索引
df.drop_duplicates(inplace=True,ignore_index=True)
df
示例4:使用dropna()在原数据上删除全为NaN的列
要求
承接示例3,使用dropna()在原数据上删除全为NaN的列。
代码模板
#使用dropna()在原数据上删除全为NaN的列
df.dropna(axis=1,how='all',inplace=True)
df
结果
image.png
参考答案:
示例4:使用dropna()在原数据上删除全为NaN的列
要求
承接示例3,使用dropna()在原数据上删除全为NaN的列。
代码模板
#使用dropna()在原数据上删除全为NaN的列
df.dropna(axis=1,how='all',inplace=True)
df
示例5:fillna()函数填充缺失值
要求
承接示例4,使用fillna()以0填充所有缺失值。
(尝试调整各参数,可使用最大、最小值、平均值、中位数等填充。)
代码模板
#以0填充所有缺失值
df.fillna(0)
结果
image.png
参考答案:
示例5:fillna()函数填充缺失值
要求
承接示例4,使用fillna()以0填充所有缺失值。
(尝试调整各参数,可使用最大、最小值、平均值、中位数等填充。)
代码模板
#以0填充所有缺失值
df.fillna(0)
--------------------------------------------------> 8.Pandas高阶函数
示例1:map()函数
要求
数据准备: 用Pandas来读取’门店销售数据.xlsx’文件,并强制将’年’、‘月’、‘门店’三列转换为字符串类型。数据读取后,用head()函数,看前几行数据。
读取’门店销售数据.xlsx’的URL地址:
https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx
(1)根据读取的数据,将销售收入达到400000被评为’优秀门店’,否则标记为’非优秀门店’,分别使用使用for循环和Series.map()函数来实现。
(2)将数据中刚插入的’门店级别’列中’优秀门店’替换成’A类门店’,其他替换为’其他门店’。
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
data=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str})
#显示数据前5行
data.head()
结果
image.png
参考答案:
(1)根据读取的数据,将销售收入达到400000被评为’优秀门店’,否则标记为’非优秀门店’,分别使用使用for循环和Series.map()函数来实现。
代码模板
#使用for循环把数据中的销售收入>400000的评为'优秀门店',否则标记为'非优秀门店'。
for i in data['销售收入'].index:
data.loc[i,'门店级别']='优秀门店' if data.loc[i,'销售收入']>=400000 else '非优秀门店'
data.head()
(2)将数据中刚插入的’门店级别’列中’优秀门店’替换成’A类门店’,其他替换为’其他门店’。
代码模板
#将数据中刚插入的'门店级别'列中'优秀门店'替换成'A类门店',其他替换为'其他门店'
data['门店级别']=data['门店级别'].map({'优秀门店':'A类门店','非优秀门店':'其他门店'})
data.head()
示例2:apply()函数1
要求
数据准备: 用Pandas来读取’门店销售数据.xlsx’文件,并强制将’年’、‘月’、'门店’三列转换为字符串类型。数据读取后,用head()函数,看前几行数据。
读取’门店销售数据.xlsx’的URL地址:
https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx
(1)销售收入、销售成本、销售毛利三列数据以万元显示,保留四位小数,同时修改列名。
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
data=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str})
#显示数据前5行
data.head()
结果
image.png
参考答案:
代码模板
#沿着0轴计算,销售收入、销售成本、销售毛利沿着数据列分别进行除以10000,保留四位小数
data[['销售收入', '销售成本', '销售毛利']] = data[['销售收入', '销售成本', '销售毛利']].apply(lambda x:round(x/10000,4),axis=0)
data.rename(columns={'销售收入':'销售收入(万元)','销售成本':'销售成本(万元)','销售毛利':'销售毛利(万元)'},inplace=True)#修改列名
data.head()
示例3:apply()函数2
要求
数据准备: 用Pandas来读取’门店销售数据.xlsx’文件,并强制将’年’、‘月’、'门店’三列转换为字符串类型。数据读取后,用head()函数,看前几行数据。
读取’门店销售数据.xlsx’的URL地址:
https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx
(1)计算每笔数据的毛利率,并将计算结果后添加“%”,并存储在【销售毛利率】列。
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
data=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str})
#显示数据前5行
data.head()
结果
image.png
参考答案:
代码模板
#按行(axis=1)的实现计算毛利率,计算结果后添加”%”,并存储在【销售毛利率】列
def func_01(row):
row['销售毛利率']=format(row['销售毛利']/row['销售收入'],'.2%')#format()格式化函数
return row
data[['销售收入','销售成本','销售毛利']].apply(func_01,axis=1)
示例4:applymap()函数
要求
(1)用Pandas来读取’门店销售数据.xlsx’文件,并强制将’年’、‘月’、'门店’三列转换为字符串类型。数据读取后,用head()函数,看前几行数据。
读取’门店销售数据.xlsx’的URL地址:
https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx
(2)将原始data中销售收入,销售成本和销售毛利三列统一保留一位小数显示。
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
data=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str})
#显示数据前5行
data.head()
代码模板
#将DataFrame中销售收入,销售成本和销售毛利统一保留一位小数显示。
data[['销售收入','销售成本','销售毛利']].applymap(lambda x:"%.1f"%x)
--------------------------------------------------> 9.数据分组与聚合
示例1:分组-grpupby
要求
数据准备: 用Pandas来读取’门店销售数据.xlsx’文件,并强制将’年’、‘月’、'门店’三列转换为字符串类型。数据读取后,可以用head()函数,看前几行数据。
读取’门店销售数据.xlsx’的URL地址:
https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx
(1)使用map函数将月对应为01-12月;
(2)按照月分组,分析销售整体数据。
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
data=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str})
#显示数据前5行
data.head()
结果
image.png
参考答案:
使用map函数将月对应为01-12月
代码模板
#创建一个英文月份和数字月份对照的字典,将英文月份转换为数字字符串,
monthdict={'Jan':'01','Feb':'02','Mar':'03','Apr':'04','May':'05','Jun':'06',
'Jul':'07','Aug':'08','Sep':'09','Oct':'10','Nov':'11','Dec':'12',}
data['月'] = data['月'].map(monthdict)
data
结果
image.png
按照月分组,分析销售整体数据
代码模板
#根据月列进行分组,求各月销售收入,销售成本,销售毛利总和。
data.groupby('月').sum()
示例2:神奇的聚合-agg
要求
上接示例1,将数据根据年、月列聚合后,计算销售收入列的的总和,销售成本列的平均值。
参考答案:
代码模板
#将数据根据年、月列聚合后,计算销售收入列的的总和,销售成本列的平均值
data.groupby(['年','月']).agg({'销售收入':'sum','销售成本':'mean'})
--------------------------------------------------> 10.数据透视表与轴向转换
示例1:数据透视表-pivot_table
要求
数据准备: 用Pandas来读取’门店销售数据.xlsx’文件,并强制将’年’、‘月’、‘门店’三列转换为字符串类型。数据读取后,可以用head()函数,看前几行数据。
读取’门店销售数据.xlsx’的URL地址:
https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx
(1)使用map函数将月对应为01-12月;
(2)Pandas做数据透视表,行为’月’,列为’年’,统计指标为销售收入的合计和销售毛利的平均数。
代码模板
#导入Pandas库
import pandas as pd
#读取Excel文件,利用converters参数强制设置"年"、"月"、"门店"三列转换为字符串类型。
data=pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220914-1bbc5a0e-9409-4ffa-adab-06f15090e2fb.xlsx',sheet_name=0,converters={'年':str,'月':str,'门店':str})
#显示数据前5行
data.head()
结果
image.png
参考答案:
使用map函数将月对应为01-12月
代码模板
#创建一个英文月份和数字月份对照的字典,将英文月份转换为数字字符串,
monthdict={'Jan':'01','Feb':'02','Mar':'03','Apr':'04','May':'05','Jun':'06',
'Jul':'07','Aug':'08','Sep':'09','Oct':'10','Nov':'11','Dec':'12',}
data['月'] = data['月'].map(monthdict)
data
代码模板
#行为'月',列为'年',统计指标为销售收入的合计和销售毛利的平均数,在透视表中加上汇总栏。
df1=pd.pivot_table(data,
index=['月'],
columns=['年'],
values=['销售收入','销售毛利'],
aggfunc={'销售收入':'sum','销售毛利':'mean'},
fill_value=0,
margins=True,
margins_name='汇总')
df1
示例2:轴向转换-stack
要求
(1)承接示例1,按照月分组,分析销售整体数据。
(2)使用stack函数,将销售收入、销售成本、销售毛利索引转换到行索引,默认转为最内侧索引
(3)使用stack函数,将销售收入、销售成本、销售毛利索引转换到行索引,默认转为最内侧索引。将上例中外侧索引’月’转换到列索引中。
参考答案:
承接示例1,按照月分组,分析销售整体数据
代码模板
#根据月列进行分组,求各月销售收入,销售成本,销售毛利总和。
data1 = data.groupby('月').sum()
data1
代码模板
#使用stack函数,将销售收入、销售成本、销售毛利索引转换到行索引,默认转为最内侧索引
data1.stack(level=-1)
代码模板
#使用stack函数,将销售收入、销售成本、销售毛利索引转换到行索引,默认转为最内侧索引。将上例中外侧索引'月'转换到列索引中。
data1.stack().unstack(0)
5数据可视化分析 > > > > > > > > > >
--------------------------------------------------> 1.Matplotlib可视化库概述
示例1:Matplotlib初级应用
要求
根据给定数据,绘制一家公司各类商品库存的柱状图。
种类为 [‘上衣’,‘裤子’,‘裙子’,‘鞋帽’,‘领带’,‘袜子’]
数量为[150,200,300,230,100,240]
参考答案:
代码模板
# 1.引入matplotlib.pyplot画图
import matplotlib.pyplot as plt
#2.创建画布
plt.figure(figsize=(6,4))
#3.创建子图(如只有一个子图,可省略此步骤)
plt.subplot(1,1,1)
#4.绘制子图
X = ['上衣','裤子','裙子','鞋帽','领带','袜子']
y = [150,200,300,230,100,240]
plt.bar(X,y)
#5.添加子图标题、x,y轴标签
plt.title('各类商品库存柱状图')
plt.xlabel('种类')
plt.ylabel('数量')
#6.保存图片(必须在plt.show()之前)
plt.savefig('库存商品数量柱状图')
#7.显示图片
--------------------------------------------------> 2.Matplotlib常用图表绘制
示例2:Matplotlib-折线图
要求
读取“店铺销售数据”,计算支付转化率、加入购物车比例、销售额,并绘制折线图。
参考答案:
代码模板
# 读取数据
import pandas as pd
data = pd.read_excel('https://oss.xinchanjiao.com/upload/default/20220804-269363e4-d846-4457-94f7-b34dc3e10b40.xlsx')
# 数据准备
#计算支付转化率
data['支付转化率'] = round(data['支付买家数']/data['访客数'],4)
#计算加入购物车比例
data['加购率'] = round(data['加入购物车件数']/data['访客数'],4)
#计算销售额
data['销售额'] = data['商品价格']*data['销售数量']
# 数据可视化
# 引入matplotlib
from matplotlib import pyplot as plt
plt.rcParams['font.family']='SimHei' # 用黑体显示中文
#创建画布
plt.figure(figsize=(10, 5))
#绘制销售数量折线图
plt.plot(data['款号'], data['支付转化率'], label='支付转化率', marker='o', ls='-.')
plt.plot(data['款号'], data['加购率'], label='加购率', marker='*', ls=':')
#设置图形主题、轴标签等
plt.title('各款号支付转化率&加购率折线图')
plt.xlabel('款号')
plt.ylabel('比率')
plt.xticks(range(1, 11))
#显示图例、图形
plt.legend()
plt.show()
示例3:Matplotlib-柱状图
要求
根据示例2结果data“店铺销售数据”绘制销售数量、库存数量堆叠柱状图。
参考答案:
代码模板
# 数据可视化
# 引入matplotlib
from matplotlib import pyplot as plt
plt.rcParams['font.family']='SimHei' # 用黑体显示中文
#创建画布
plt.figure(figsize=(10, 7))
#绘制销售数量折线图
plt.bar(data['款号'], data['销售数量'], label='销售数量')
#在销售数量数据之上画库存量
plt.bar(data['款号'], data['库存数量'], bottom=data['销售数量'],label='库存数量')
#设置图形主题、轴标签等
plt.title('各款号销售数量&库存数量堆叠柱状图')
plt.xlabel('款号')
plt.ylabel('数量')
plt.xticks(range(1, 11))
#显示图例、图形
plt.legend()
plt.show()
示例4:Matplotlib-饼图
要求
根据示例2结果data“店铺销售数据”,绘制访客数环形图。
参考答案:
代码模板
# 数据可视化
# 引入matplotlib
from matplotlib import pyplot as plt
plt.rcParams['font.family']='SimHei' # 用黑体显示中文
#创建画布
plt.figure(figsize=(10, 10))
#绘制销售数量折线图
plt.pie(data['访客数'],labels=data['款号'],autopct='%.2f%%',
pctdistance=0.8,wedgeprops=dict(width=0.4),
textprops=dict(size=20))
#设置图形主题、轴标签等
plt.title('各款号访客数环形图',fontdict=dict(fontsize=25))
#显示图例、图形
plt.legend(loc='center')
plt.show()
示例5:Matplotlib-饼图
要求
根据示例2结果data“店铺销售数据”,绘制组合图形。
参考答案:
代码模板
# 数据可视化
# 引入matplotlib
from matplotlib import pyplot as plt
plt.rcParams['font.family']='SimHei' # 用黑体显示中文
# 数据可视化
# 引入matplotlib
from matplotlib import pyplot as plt
plt.rcParams['font.family']='SimHei' # 用黑体显示中文
#创建画布
plt.figure(figsize=(18, 10))
#第一步-绘制221位置上图
plt.subplot(221)
#绘制销售数量折线图
plt.plot(data['款号'], data['支付转化率'], label='支付转化率', marker='o', ls='-.')
plt.plot(data['款号'], data['加购率'], label='加购率', marker='*', ls=':')
#设置图形主题、轴标签等
plt.title('各款号支付转化率&加购率折线图')
plt.xlabel('款号')
plt.ylabel('比率')
plt.xticks(range(1, 11))
plt.legend()
#第二步-绘制223位置上图
plt.subplot(223)
#绘制销售数量折线图
plt.bar(data['款号'], data['销售数量'], label='销售数量')
#在销售数量数据之上画库存量
plt.bar(data['款号'], data['库存数量'], bottom=data['销售数量'],label='库存数量')
#设置图形主题、轴标签等
plt.title('各款号销售数量&库存数量堆叠柱状图')
plt.xlabel('款号')
plt.ylabel('数量')
plt.xticks(range(1, 11))
plt.legend()
#第三步-绘制122位置上图
plt.subplot(122)
#绘制销售数量折线图
plt.pie(data['访客数'],labels=data['款号'],autopct='%.2f%%',pctdistance=0.8,wedgeprops=dict(width=0.4),
textprops=dict(size=20))
#设置图形主题、轴标签等
plt.title('各款号访客数环形图')
#显示图例、图形
plt.legend(loc='center')
plt.show()
--------------------------------------------------> 3.Pandas常用图表绘制
示例6:Pandas绘图函数-plot()
要求
使用DateFrame.plot()函数绘制支付转化率、加购率折线图,并将加购率值显示在右侧y轴。
代码模板
#筛选支付转化率、加购率两列直接调用plot()函数绘制图像
data[['支付转化率','加购率']].plot(title='支付转化率&加购率折线图',
secondary_y='加购率', figsize=(12,5), grid=True,xticks=range(10))
plt.show()
输出结果
image.png
参考答案:
示例6:Pandas绘图函数-plot()
要求
使用DateFrame.plot()函数绘制支付转化率、加购率折线图,并将加购率值显示在右侧y轴。
代码模板
#筛选支付转化率、加购率两列直接调用plot()函数绘制图像
data[['支付转化率','加购率']].plot(title='支付转化率&加购率折线图',
secondary_y='加购率', figsize=(12,5), grid=True,xticks=range(10))
plt.show()
--------------------------------------------------> 2.Pyecharts初级与高级应用
示例1:Pyecharts初级应用
要求
A公司1-4月线上销售量为13000件,12000件,15000件,14500件。线下销售量为8000件, 7600件,7500件,8200件。使用通过Pyecharts绘制1-4月份线上线下销售量柱状图。
参考答案:
代码模板
#引入柱状图
from pyecharts.charts import Bar
#初始化柱状图
bar = Bar()
#添加x轴及y轴数据
bar.add_xaxis( ['1月', '2月', '3月', '4月'])
bar.add_yaxis('线上',[13000, 12000, 15000, 14500])
bar.add_yaxis('线下', [8000, 7600, 7500, 8200])
#显示柱状图
bar.render_notebook()
示例2:Pyecharts初级应用(地图)
要求
B公司在全国共132家门店,各地区门店数分别为:北京35,上海26,广东25,江苏16,四川12,浙江10,山东8。通过地图方式展示各省份门店数量。
参考答案:
代码模板
#门店数量数据
data = [['北京',35],['上海',26],['广东',25],['江苏',16],['四川',12],['浙江',10],['山东',8]]
#引入柱状图
from pyecharts.charts import Map
map = Map() #初始化柱状图
#添加x轴及y轴数据
map.add('门店数量',data,'china')
#显示柱状图
map.render_notebook()
示例3:Pyecharts-初始配置项
要求
A公司1-4月线上销售量为13000件,12000件,15000件,14500件。线下销售量为8000件, 7600件,7500件,8200件。使用通过Pyecharts绘制1-4月份线上线下销售量柱状图。
请使用初始化配置项进行调整: 宽度设置为1000px;高度设置为600px;图表ID设置为’线上线下销售额柱状图’;网页标题设置为线上线下销售额柱状图.html;背景设置为白色;主题设置为光亮;初始动画的时长为1200ms;初始动画的缓动效果设置为elasticOut
参考答案:
代码模板
#引入柱状图及配置项
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.options import global_options,series_options
#初始化柱状图
bar = Bar(init_opts=opts.InitOpts(width='1000px', #宽度设置为1000px
height='600px', #高度设置为600px
chart_id='线上线下销售额柱状图', #图表ID,图表的唯一标识
page_title='线上线下销售额柱状图.html', #网页标题
bg_color='white', #背景设置为白色
theme='light', #主题设置为光亮,对应柱状颜色也会调整
animation_opts=opts.AnimationOpts(animation_duration=1200, #初始动画的时长为1200ms,即1.2秒。默认为1000毫秒。
animation_easing='elasticOut'))) #初始动画的缓动效果设置为elasticOut,弹性弹出
bar.set_global_opts(title_opts=opts.TitleOpts())
#添加x轴及y轴数据
bar.add_xaxis( ['1月', '2月', '3月', '4月'])
bar.add_yaxis('线上',[13000, 12000, 15000, 14500])
bar.add_yaxis('线下', [8000, 7600, 7500, 8200])
#显示柱状图
bar.render_notebook()
示例4:Pyecharts高级应用-全局配置项
要求
A公司1-4月线上销售量为13000件,12000件,15000件,14500件。线下销售量为8000件, 7600件,7500件,8200件。使用通过Pyecharts绘制1-4月份线上线下销售量柱状图。
请使用全局配置项进行调整:
①标题配置项
主标题名称设置为’主标题名-线上线下销售量柱状图’;副标题名称设置为’副标题名-4个月份’;title 组件离容器上侧的距离设置为top;主副标题之间的间距设置为15
②图例配置项
图例组件离容器上侧的距离设置为10;图例列表的布局朝向设置为垂直的;图例组件离容器左侧的距离设置为60
③工具箱配置项
是否显示工具栏组件设置为True;组件离容器左侧的距离设置为85%
④坐标轴配置项
X坐标轴名称设置为月份;Y坐标轴名称设置为数量(件)
参考答案:
代码模板
#引入柱状图及配置项
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.options import global_options,series_options
#初始化柱状图
bar = Bar(init_opts=opts.InitOpts(width='1000px',height='600px',theme='light'))
#添加x轴及y轴数据
bar.add_xaxis( ['1月', '2月', '3月', '4月'])
bar.add_yaxis('线上',[13000, 12000, 15000, 14500])
bar.add_yaxis('线下', [8000, 7600, 7500, 8200])
#设置全局配置项
bar.set_global_opts(title_opts=opts.TitleOpts(title='主标题名-线上线下销售量柱状图',pos_left ='center',item_gap=10), #标题配置项
legend_opts=opts.LegendOpts(pos_top=10,orient='vertical',pos_left=120), #图例配置项
toolbox_opts=opts.ToolboxOpts(is_show=True,pos_left='85%'), #工具箱配置项
xaxis_opts=opts.AxisOpts(name='月份'), yaxis_opts=opts.AxisOpts(name='数量(件)')) #坐标轴配置项
#显示柱状图
bar.render_notebook()
示例5:Pyecharts高级应用-系列
要求
A公司1-4月线上销售量为13000件,12000件,15000件,14500件。线下销售量为8000件, 7600件,7500件,8200件。使用通过Pyecharts绘制1-4月份线上线下销售量折线图。
请使用全局配置项-系列配置项进行调整:
线样式设置为True;颜色设置为红色;文字的字体大小设置为10
参考答案:
代码模板
#引入柱状图及配置项
from pyecharts.charts import Bar,Line
from pyecharts.options import global_options,series_options
#初始化柱状图
line = Line(init_opts=opts.InitOpts(width='1000px',height='600px',theme='light'))
#添加x轴及y轴数据
line.add_xaxis(['1月', '2月', '3月', '4月'])
line.add_yaxis('线上', [13000, 12000, 15000, 14500],
linestyle_opts=opts.LineStyleOpts(width=5,opacity=0.4),areastyle_opts=opts.AreaStyleOpts(color='blue',opacity=0.4))
line.add_yaxis('线下销售量', [8000, 7600, 7500, 8200],
linestyle_opts=opts.LineStyleOpts(width=5,opacity=0.4,type_='dotted'),areastyle_opts=opts.AreaStyleOpts(color='green',opacity=0.4))
#设置全局配置项
line.set_global_opts(title_opts=opts.TitleOpts(title='主标题名-线上线下销售量柱状图',pos_left ='center',item_gap=10),#标题配置项
legend_opts=opts.LegendOpts(pos_top=25)) #图例配置项
#系列配置项
line.set_series_opts(label_opts=opts.LabelOpts(is_show=True,color='red',font_size=10))
#显示折线图
line.render_notebook()
--------------------------------------------------> 3.Pyecharts组合图形
示例7:Pyecharts组合图形-并行
要求
绘制各款号加购件数、销售数量柱状图,访客数折线图,使用Grid并行多图纵向显示。
参考答案:
代码模板
#导入所需库
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Grid #可一次性导入多个图表
#准备数据
x = df['款号'].tolist()
y1 = df['加入购物车件数'].tolist()
y2 = df['销售数量'].tolist()
y3 = df['访客数'].tolist()
#绘制柱状图
#通过链式调用的方式增加数据和配置项
bar = (Bar()
.add_xaxis(x)
.add_yaxis("加购件数", y1)
.add_yaxis("销售数量", y2)
.set_global_opts(title_opts=opts.TitleOpts(
title="加购件数&销售量柱状图"),
yaxis_opts=opts.AxisOpts(name='数量'),
xaxis_opts=opts.AxisOpts(name='款号')))
#绘制折线图
line = (Line().add_xaxis(x).add_yaxis(
"访客数",
y3,
linestyle_opts=opts.LineStyleOpts(
width=3, color='red', type_='dashed')).set_global_opts(
title_opts=opts.TitleOpts(title="访客数折线图", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%"),
yaxis_opts=opts.AxisOpts(name='人数'),
xaxis_opts=opts.AxisOpts(name='款号')))
#创建grid并行多图
grid = Grid()
#将柱状图放在上方
grid.add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
#将折线图放在下方
grid.add(line, grid_opts=opts.GridOpts(pos_top="60%"))
#显示图形
grid.render_notebook()
示例8:Pyecharts组合图形-顺序
要求
绘制库存数量柱状图及销售数量饼状图后,与任务2中并行多图组成顺序多图。
参考答案:
代码模板
#绘制柱状图
#导入所需库
from pyecharts import options as opts
from pyecharts.charts import Bar
#准备数据
x = df['款号'].tolist()
y1 = df['库存数量'].tolist()
bar1 = (
Bar(init_opts=opts.InitOpts(theme='roma'))
.add_xaxis(x)
.add_yaxis("库存数量", y1)
.set_global_opts(
title_opts=opts.TitleOpts(title="库存数量柱状图"),
yaxis_opts=opts.AxisOpts(name='数量'),
xaxis_opts=opts.AxisOpts(name='款号')))
bar1.render_notebook()
#绘制销售数量饼状图
#导入所需库
from pyecharts import options as opts
from pyecharts.charts import Pie
#准备数据,将Series转换为pyecharts需要的格式
style = df['款号'].tolist()
sale = df['销售数量'].tolist()
#通过zip函数,将数据转变为Pie图形需要的格式 [(key1, value1), (key2, value2)]
data = [z for z in zip([f'款号{i}'for i in style],sale)]
#绘制各款号销售数量分布饼状图
pie = (Pie().add('',data)
.set_global_opts(title_opts=opts.TitleOpts(title='各款号销售数量分布饼状图',
pos_left='center'),
legend_opts=opts.LegendOpts(orient='vertical',
pos_left='10%',
pos_top='middle'))
.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}\n{d}%')))
#显示饼状图
pie.render_notebook()
#导入Page顺序多图
from pyecharts.charts import Page
#初始化Page顺序多图,并使用DraggablePageLayout:可拖拽布局方式
page = Page(layout=Page.DraggablePageLayout)
#将库存数量柱状图bar1、销售数量饼状图pie,并行多图grid增加到Page中
page.add(pie,bar1,grid)
#保存Page,命名为门店经营情况.html
page.render("门店经营情况.html")
示例9:组合图形-时间线轮播多图
示例数据
读取Excel文件门店销售数据.xlsx,表2:2022-0102销量汇总
数据预览: 点击进入
URL 地址: https://oss.xinchanjiao.com/upload/default/20220804-269363e4-d846-4457-94f7-b34dc3e10b40.xlsx
代码模板
#引入pandas库
import pandas as pd
#读取并查看数据
df1 = pd.read_excel(r'https://oss.xinchanjiao.com/upload/default/20220804-269363e4-d846-4457-94f7-b34dc3e10b40.xlsx',sheet_name=1,converters={'款号':str})
df1.head(10)
输出结果
image.png
参考答案:
代码模板
#导入所需库
from pyecharts import options as opts
from pyecharts.charts import Pie,Timeline
#准备数据,将Series转换为pyecharts需要的格式
style = df['款号'].tolist()
sale_202201 = df1['销售数量_202201'].tolist()
sale_202202 = df1['销售数量_202202'].tolist()
#通过zip函数,将数据转变为Pie图形需要的格式 [(key1, value1)]
data_202201 = [z1 for z1 in zip([f'款号{i}'for i in style],sale_202201)]
data_202202 = [z2 for z2 in zip([f'款号{i}'for i in style],sale_202202)]
#绘制202201各款号销售数量分布饼状图
pie_202201 = (Pie()
.add('',data_202201)
.set_global_opts(title_opts=opts.TitleOpts(title='各款号销售数量分布饼状图',pos_left='center'),
legend_opts=opts.LegendOpts(orient='vertical',pos_left='10%',pos_top='middle'))
.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}\n{d}%'))
)
#绘制202202各款号销售数量分布饼状图
pie_202202 = (Pie()
.add('',data_202202)
.set_global_opts(title_opts=opts.TitleOpts(title='各款号销售数量分布饼状图',pos_left='center'),
legend_opts=opts.LegendOpts(orient='vertical',pos_left='10%',pos_top='middle'))
.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}\n{d}%'))
)
#初始化Timeline选项卡多图
tl = Timeline()
#将202201各款号销售数量分布饼状图加到Timeline中
tl.add(pie_202201,'202201')
#将202202各款号销售数量分布饼状图加到Timeline中
tl.add(pie_202202,'202202')
#显示Timeline选项卡多图
tl.render_notebook()
py基础语法
最新推荐文章于 2024-09-01 15:30:33 发布