Python之数据分析



【案例】

某公司有2份数据文件,现在需要对其进行数据分析,计算每日的销售额并以柱状图表的形式进行展现。

数据如下:

一月份数据:

二月份数据:

需求分析

根据题目要求我们要得到每日销售额,分析文本数据可以知道,我们只需要将对应的相同的时间提取出来,并找到相应的销售额相加得到结果即可,然后使用pyecharts画图即可。

使用面向对象思想来实现,思路图如下:

订单

设计一个订单的类类中要包含订单的基本信息。

复制代码
"""
     数据定义的类
"""
class Record:
    def __init__(self,data,order_id,money,province):
        self.data = data              # 订单日期
        self.order_id = order_id      # 订单id
        self.money = money            # 订单金额
        self.province = province      # 销售省份

    def __str__(self):
        return f"{self.data},{self.order_id},{self.money},{self.province}"

数据处理

我们手中的文本数据有两种,一个是基本的txt文件,一个是JSON类型的txt文件,因此我们设计一个读取文件的操作方法,并且这个方法要是抽象的方法,用子类来实现不同文件的数据读取。

复制代码
"""
    和文件相关的定义
"""
from data_define import *
import json
# 先定义一个抽象类用来做顶层设计,确定有那些需要实现的功能
class FileReader:
    def read_data(self) -> list[Record]:
        """
        读取文件的数据,读到的每一条数据都转换为Order对象,将他们封装到list内返回即可
        :return:
        """
        pass

class TextFileReader(FileReader):

    def __init__(self,path):
        self.path = path        # 定义成员变量记录文件路径

    # 复写(实现抽象方法)父类的方法
    def read_data(self) -> list[Record]:
        f = open(self.path,"r",encoding="UTF-8")

        record_list:list[Record] = []
        for line in f.readlines():   # readlines()一次性读取文件的每一行内容返回的是列表
            line = line.strip()      # 消除读取到的每一行的换行符
            data_list = line.split(",")
            record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3])  # 构建为Order对象
            record_list.append(record)

        f.close()
        return record_list


class JsonFileReader(FileReader):


    def __init__(self,path):
        self.path = path

    def read_data(self) -> list[Record]:
        f = open(self.path,"r",encoding="UTF-8")

        record_list:list[Record] = []
        for line in f.readlines():   # readlines()一次性读取文件的每一行内容返回的是列表
            data_dict = json.loads(line)
            record = Record(data_dict['date'],data_dict['order_id'],data_dict['money'],data_dict['province'],)  # 构建为Order对象
            record_list.append(record)
        f.close()
        return record_list


if __name__ == '__main__':
    text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
    jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")
    list1 = text_file_reader.read_data()
    list2 = jison_file_reader.read_data()
    for l1 in list1:
        print(l1)
    for l2 in list2:
        print(l2)

计算数据

通过上述的处理我们设置好了处理数据的方法。接下来,我们通过打开文件获取数据,将对应的日期的金额加起来即可。

复制代码
#  创建文件对象获取文件
text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")

jen_data:list[Record] = text_file_reader.read_data()  # 一月份的数据
feb_data:list[Record] = jison_file_reader.read_data()  # 二月份的数据

# 将两个月份的数据合并
all_data:list[Record] = jen_data+feb_data

# 开始进行数据计算
data_dict = {}
for record in all_data:
    if record.data in data_dict.keys():
        # 如果当前的日期在字典中累加起来即可
        data_dict[record.data] += record.money

    else:
        data_dict[record.data] = record.money

我们可以运用字典将每天的时间与金额形成key与value对应的关系。

绘制图像

使用Pyecharts提供的方法来绘制柱状图。

复制代码
# 可视化图表开发
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))
# 添加x轴的数据
bar.add_xaxis(list(data_dict.keys()))
# 添加y轴的数据
bar.add_yaxis("销售额",list(data_dict.values()),label_opts=LabelOpts(is_show=False))
bar.set_global_opts(
    title_opts=TitleOpts(title="每日销售额")
)
bar.render("每日销售额.html")

【全部代码】

复制代码
data_define.py

"""
     数据定义的类
"""
class Record:
    def __init__(self,data,order_id,money,province):
        self.data = data              # 订单日期
        self.order_id = order_id      # 订单id
        self.money = money            # 订单金额
        self.province = province      # 销售省份

    def __str__(self):
        return f"{self.data},{self.order_id},{self.money},{self.province}"


file_define.py

"""
    和文件相关的定义
"""
from data_define import *
import json
# 先定义一个抽象类用来做顶层设计,确定有那些需要实现的功能
class FileReader:
    def read_data(self) -> list[Record]:
        """
        读取文件的数据,读到的每一条数据都转换为Order对象,将他们封装到list内返回即可
        :return:
        """
        pass   # 抽象方法

class TextFileReader(FileReader):  # 用来读取普通文件数据的方法

    def __init__(self,path):
        self.path = path        # 定义成员变量记录文件路径

    # 复写(实现抽象方法)父类的方法
    def read_data(self) -> list[Record]:
        f = open(self.path,"r",encoding="UTF-8")

        record_list:list[Record] = []
        for line in f.readlines():   # readlines()一次性读取文件的每一行内容返回的是列表
            line = line.strip()      # 消除读取到的每一行的换行符
            data_list = line.split(",")
            record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3])  # 构建为Order对象
            record_list.append(record)

        f.close()
        return record_list


class JsonFileReader(FileReader):   # 用来读取JSON文件数据的方法

    def __init__(self,path):
        self.path = path

    def read_data(self) -> list[Record]:
        f = open(self.path,"r",encoding="UTF-8")

        record_list:list[Record] = []
        for line in f.readlines():   # readlines()一次性读取文件的每一行内容返回的是列表
            data_dict = json.loads(line)
            record = Record(data_dict['date'],data_dict['order_id'],data_dict['money'],data_dict['province'],)  # 构建为Order对象
            record_list.append(record)
        f.close()
        return record_list


if __name__ == '__main__':
    text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
    jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")
    list1 = text_file_reader.read_data()
    list2 = jison_file_reader.read_data()
    for l1 in list1:
        print(l1)
    for l2 in list2:
        print(l2)


main.py
"""
   1.设计一个类,可以完成数据封装
   2.设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能
   3.读取文件,生产数据对象
   4.进行数据需求的逻辑计算(计算每一天的销售额)
   5.通过PyEcharts进行绘图
"""
#  导包
from file_define import *
from data_define import *
from pyecharts.charts import *
from pyecharts.options import *
from pyecharts.globals import *
#  创建文件对象获取文件
text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")

jen_data:list[Record] = text_file_reader.read_data()  # 一月份的数据
feb_data:list[Record] = jison_file_reader.read_data()  # 二月份的数据

# 将两个月份的数据合并
all_data:list[Record] = jen_data+feb_data

# 开始进行数据计算
data_dict = {}
for record in all_data:
    if record.data in data_dict.keys():
        # 如果当前的日期在字典中累加起来即可
        data_dict[record.data] += record.money

    else:
        data_dict[record.data] = record.money

# 可视化图表开发
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))
# 添加x轴的数据
bar.add_xaxis(list(data_dict.keys()))
# 添加y轴的数据
bar.add_yaxis("销售额",list(data_dict.values()),label_opts=LabelOpts(is_show=False))
bar.set_global_opts(
    title_opts=TitleOpts(title="每日销售额")
)
bar.render("每日销售额.html")

【运行效果】

相关推荐
好家伙VCC15 小时前
**发散创新:基于Python与ROS的机器人运动控制实战解析**在现代机器人系统开发中,**运动控制**是实现智能行为的核心
java·开发语言·python·机器人
2401_8274999915 小时前
python项目实战09-AI智能伴侣(ai_partner_2-3)
开发语言·python
派葛穆15 小时前
汇川PLC-Python与汇川easy521plc进行Modbustcp通讯
开发语言·python
代码小书生15 小时前
Matplotlib,Python 数据可视化核心库!
python·信息可视化·matplotlib
默 语16 小时前
Records、Sealed Classes这些新特性:Java真的变简单了吗?
java·开发语言·python
架构师老Y16 小时前
013、数据库性能优化:索引、查询与连接池
数据库·python·oracle·性能优化·架构
Kel16 小时前
PydanticAI 源码深潜:类型安全依赖注入与图执行引擎的双核架构解析
人工智能·python·架构
亿坊电商16 小时前
亿坊外贸商城系统-支持B2C,B2B多模式,让企业做外贸电商更简单!
人工智能·数据挖掘·外贸商城
小王毕业啦16 小时前
2006-2023年 省级-建成区绿化覆盖率数据(xlsx)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
卷心菜狗16 小时前
Python进阶-深浅拷贝辨析
开发语言·python