1、导入orders.sql文件到数据库中,该订单表示某公司2014年-2020年的销售订单表,数据字段有包含客户订单的基本信息,例如订单ID、订单日期、门店名称、支付方式、发货日期等25个字段,现需要对该订单表根据需求使用matplotlib库进行数据可视化,并做出分析。要求绘制的图要直观、合理。
(1)以2018年为列,研究该电商企业的销售额和利润额的变化情况,时间以该年的周次为单位,绘制出销售额和利润额的折线图,并做出分析。
补充查询语句
SELECT WEEKOFYEAR(order_date),ROUND(SUM(sales)/10000,2),ROUND(SUM(profit)/10000,2)
FROM orders WHERE dt=2018 AND WEEKOFYEAR(order_date)<=52 GROUP BY WEEKOFYEAR(order_date)
import numpy as np
import matplotlib.pyplot as plt
import pymysql
plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
plt.rcParams['axes.unicode_minus']=False #正常显示负号
# 打开数据库连接,参数:Mysql服务器IP、用户名、密码、数据库名称。
db = pymysql.connect(host="localhost",
user="root",
password="123456",
db="visual translation",
charset="utf8")
# 使用cursor()方法创建游标对象cursor
cursor = db.cursor()
#1)2018年电商企业的销售额和利润额的变化情况,该年的周次为单位,绘制出销售额和利润额的折线图。
sql_num="SELECT WEEKOFYEAR(order_date),ROUND(SUM(sales)/10000,2),ROUND(SUM(profit)/10000,2) FROM orders WHERE dt=2018 AND WEEKOFYEAR(order_date)<=52 GROUP BY WEEKOFYEAR(order_date) "
#执行数据库查询语句
cursor.execute(sql_num)
#取出指针结果的所有行,返回结果集一个元组(tuples)
sh=cursor.fetchall()
print(sh)
v1=[]
v2=[]
v3=[]
for s in sh:
v1.append(s[0])
v2.append(s[1])
v3.append(s[2])
print(v1)
print(v2)
print(v3)
#折线图
plt.figure(figsize=(11,7))
plt.plot(v1,v2,linestyle='-.',color='red',linewidth=3.0,label='销售额')
plt.plot(v1,v3,marker='*',color='green',markersize=10,label='利润额')
#设置纵坐标范围
plt.ylim((-1,23))
# plt.xlim((0,35))
#设置横坐标角度,45度
plt.xticks(np.arange(0,55,2),rotation=45,fontsize=13)
plt.yticks(np.arange(0,23,1),fontsize=13)
#设置横纵坐标名称
plt.xlabel("日期(第几周)",fontsize=13)
plt.ylabel("销售额与利润额",fontsize=13)
#设置折线图名称
plt.title("2018年企业每周销售额与利润额分析",fontsize=16)
plt.legend(loc='upper left',fontsize=13)
plt.show()
(2)以2018年为列,研究该公司的订单销售在全国各省份(地区)的数量对比,绘制出各省份(地区)的数据对比柱形图(或条形图),并做出分析。
补充查询语句:
SELECT province,COUNT(province) AS '数量' FROM orders WHERE dt=2018 GROUP BY province
#2)2018年公司的订单销售在全国各省份(地区)的数量对比,绘制出各省份(地区)的数据对比柱形图(或条形图)。
sql_num2="SELECT province,COUNT(province) AS '数量' FROM orders WHERE dt=2018 GROUP BY province"
cursor.execute(sql_num2)
sh2=cursor.fetchall()
print(sh2)
v4=[]
v5=[]
for s2 in sh2:
v4.append(s2[0])
v5.append(s2[1])
print(v4)
print(v5)
#绘制柱形图
plt.figure(figsize=(11,7))
plt.bar(v4,v5)
plt.title("2018订单销售在全国各省份(地区)的数量对比柱形图")
plt.show()
(3)以2018年为列,研究该公司的订单销售在全国各区域的数量占比情况,绘制出各区域的数据饼状图。并做出分析。
补充查询语句:
SELECT region,COUNT(region) FROM orders WHERE dt=2018 GROUP BY region
#3)2018年公司的订单销售在全国各区域的数量占比情况的数据饼状图。
sql_num3="SELECT region,COUNT(region) FROM orders WHERE dt=2018 GROUP BY region"
cursor.execute(sql_num3)
sh3=cursor.fetchall()
print(sh3)
v6=[]
v7=[]
for s2 in sh3:
v6.append(s2[0])
v7.append(s2[1])
print(v6)
print(v7)
#绘制饼状图
plt.figure(figsize=(8,6))
plt.pie(v7,labels=v6)
plt.title("2018年公司的订单销售在全国各区域的数量占比情况的数据饼状图")
plt.show()
2、对文本文件tangshi.txt,进行中文分词处理并画出词云图。字体样式等自行设计。
#对文本文件tangshi.txt,进行中文分词处理并画出词云图。字体样式等自行设计
import imageio
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
text=''
with open('tangshi.txt') as f:
texts=f.read()
f.close()
print(texts)
words=jieba.lcut(texts)
# print(word)
#用空格分隔词语
cuted=' '.join(words)
# print(cuted)
#打开背景图
mask=imageio.imread('C:\\Users\\15300\\Pictures\\Saved Pictures\\437484189919493742.jpg')
#绘制词云
wc = WordCloud(font_path="msyh.ttc",#字体
background_color="pink", # 背景颜色
max_words=1000, # 词云显示的最大词数
max_font_size=500, # 字体最大值
# min_font_size=20, #字体最小值
random_state=100, #随机数
collocations=False, #避免重复单词
width=1600,height=1200,margin=10, #图像宽高,字间距,需要配合下面的plt.figure(dpi=xx)放缩才有效
mask=mask
)
wc.generate(cuted)
plt.figure(figsize=(11,8)) #通过这里可以放大或缩小
plt.imshow(wc)
plt.axis("off") #隐藏坐标
plt.show()