数据可视化基础

该文展示了如何使用Python的matplotlib库对2018年电商企业的销售数据进行可视化分析,包括销售额和利润额的周次变化折线图,各省份订单数量的柱形图,以及区域销售占比的饼状图。同时,文章还涉及了中文分词处理和词云图的生成,以展示文本内容的关键信息。
摘要由CSDN通过智能技术生成

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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值