当前位置:   article > 正文

Python之数据分析

Python之数据分析

 



【案例】

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

数据如下:

一月份数据:

二月份数据:

需求分析

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

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

订单

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

  1. """
  2. 数据定义的类
  3. """
  4. class Record:
  5. def __init__(self,data,order_id,money,province):
  6. self.data = data # 订单日期
  7. self.order_id = order_id # 订单id
  8. self.money = money # 订单金额
  9. self.province = province # 销售省份
  10. def __str__(self):
  11. return f"{self.data},{self.order_id},{self.money},{self.province}"

数据处理 

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

  1. """
  2. 和文件相关的定义
  3. """
  4. from data_define import *
  5. import json
  6. # 先定义一个抽象类用来做顶层设计,确定有那些需要实现的功能
  7. class FileReader:
  8. def read_data(self) -> list[Record]:
  9. """
  10. 读取文件的数据,读到的每一条数据都转换为Order对象,将他们封装到list内返回即可
  11. :return:
  12. """
  13. pass
  14. class TextFileReader(FileReader):
  15. def __init__(self,path):
  16. self.path = path # 定义成员变量记录文件路径
  17. # 复写(实现抽象方法)父类的方法
  18. def read_data(self) -> list[Record]:
  19. f = open(self.path,"r",encoding="UTF-8")
  20. record_list:list[Record] = []
  21. for line in f.readlines(): # readlines()一次性读取文件的每一行内容返回的是列表
  22. line = line.strip() # 消除读取到的每一行的换行符
  23. data_list = line.split(",")
  24. record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3]) # 构建为Order对象
  25. record_list.append(record)
  26. f.close()
  27. return record_list
  28. class JsonFileReader(FileReader):
  29. def __init__(self,path):
  30. self.path = path
  31. def read_data(self) -> list[Record]:
  32. f = open(self.path,"r",encoding="UTF-8")
  33. record_list:list[Record] = []
  34. for line in f.readlines(): # readlines()一次性读取文件的每一行内容返回的是列表
  35. data_dict = json.loads(line)
  36. record = Record(data_dict['date'],data_dict['order_id'],data_dict['money'],data_dict['province'],) # 构建为Order对象
  37. record_list.append(record)
  38. f.close()
  39. return record_list
  40. if __name__ == '__main__':
  41. text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
  42. jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")
  43. list1 = text_file_reader.read_data()
  44. list2 = jison_file_reader.read_data()
  45. for l1 in list1:
  46. print(l1)
  47. for l2 in list2:
  48. print(l2)

计算数据 

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

  1. # 创建文件对象获取文件
  2. text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
  3. jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")
  4. jen_data:list[Record] = text_file_reader.read_data() # 一月份的数据
  5. feb_data:list[Record] = jison_file_reader.read_data() # 二月份的数据
  6. # 将两个月份的数据合并
  7. all_data:list[Record] = jen_data+feb_data
  8. # 开始进行数据计算
  9. data_dict = {}
  10. for record in all_data:
  11. if record.data in data_dict.keys():
  12. # 如果当前的日期在字典中累加起来即可
  13. data_dict[record.data] += record.money
  14. else:
  15. data_dict[record.data] = record.money

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

 绘制图像

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

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

【全部代码】

  1. data_define.py
  2. """
  3. 数据定义的类
  4. """
  5. class Record:
  6. def __init__(self,data,order_id,money,province):
  7. self.data = data # 订单日期
  8. self.order_id = order_id # 订单id
  9. self.money = money # 订单金额
  10. self.province = province # 销售省份
  11. def __str__(self):
  12. return f"{self.data},{self.order_id},{self.money},{self.province}"
  13. file_define.py
  14. """
  15. 和文件相关的定义
  16. """
  17. from data_define import *
  18. import json
  19. # 先定义一个抽象类用来做顶层设计,确定有那些需要实现的功能
  20. class FileReader:
  21. def read_data(self) -> list[Record]:
  22. """
  23. 读取文件的数据,读到的每一条数据都转换为Order对象,将他们封装到list内返回即可
  24. :return:
  25. """
  26. pass # 抽象方法
  27. class TextFileReader(FileReader): # 用来读取普通文件数据的方法
  28. def __init__(self,path):
  29. self.path = path # 定义成员变量记录文件路径
  30. # 复写(实现抽象方法)父类的方法
  31. def read_data(self) -> list[Record]:
  32. f = open(self.path,"r",encoding="UTF-8")
  33. record_list:list[Record] = []
  34. for line in f.readlines(): # readlines()一次性读取文件的每一行内容返回的是列表
  35. line = line.strip() # 消除读取到的每一行的换行符
  36. data_list = line.split(",")
  37. record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3]) # 构建为Order对象
  38. record_list.append(record)
  39. f.close()
  40. return record_list
  41. class JsonFileReader(FileReader): # 用来读取JSON文件数据的方法
  42. def __init__(self,path):
  43. self.path = path
  44. def read_data(self) -> list[Record]:
  45. f = open(self.path,"r",encoding="UTF-8")
  46. record_list:list[Record] = []
  47. for line in f.readlines(): # readlines()一次性读取文件的每一行内容返回的是列表
  48. data_dict = json.loads(line)
  49. record = Record(data_dict['date'],data_dict['order_id'],data_dict['money'],data_dict['province'],) # 构建为Order对象
  50. record_list.append(record)
  51. f.close()
  52. return record_list
  53. if __name__ == '__main__':
  54. text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
  55. jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")
  56. list1 = text_file_reader.read_data()
  57. list2 = jison_file_reader.read_data()
  58. for l1 in list1:
  59. print(l1)
  60. for l2 in list2:
  61. print(l2)
  62. main.py
  63. """
  64. 1.设计一个类,可以完成数据封装
  65. 2.设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能
  66. 3.读取文件,生产数据对象
  67. 4.进行数据需求的逻辑计算(计算每一天的销售额)
  68. 5.通过PyEcharts进行绘图
  69. """
  70. # 导包
  71. from file_define import *
  72. from data_define import *
  73. from pyecharts.charts import *
  74. from pyecharts.options import *
  75. from pyecharts.globals import *
  76. # 创建文件对象获取文件
  77. text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
  78. jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")
  79. jen_data:list[Record] = text_file_reader.read_data() # 一月份的数据
  80. feb_data:list[Record] = jison_file_reader.read_data() # 二月份的数据
  81. # 将两个月份的数据合并
  82. all_data:list[Record] = jen_data+feb_data
  83. # 开始进行数据计算
  84. data_dict = {}
  85. for record in all_data:
  86. if record.data in data_dict.keys():
  87. # 如果当前的日期在字典中累加起来即可
  88. data_dict[record.data] += record.money
  89. else:
  90. data_dict[record.data] = record.money
  91. # 可视化图表开发
  92. bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))
  93. # 添加x轴的数据
  94. bar.add_xaxis(list(data_dict.keys()))
  95. # 添加y轴的数据
  96. bar.add_yaxis("销售额",list(data_dict.values()),label_opts=LabelOpts(is_show=False))
  97. bar.set_global_opts(
  98. title_opts=TitleOpts(title="每日销售额")
  99. )
  100. bar.render("每日销售额.html")

 【运行效果】

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号