提示:自学笔记,笔记而已
文章目录
前言
本次的学习案例主要是以面向对象的思想编写的代码,涉及到了类的封装,类的继承,抽象类,以及数据可视化分析。
Python学习—黑马程序员—数据分析案例
2011年1月销售数据.txt
2011年2月销售数据JSON.txt
提示:以下是本篇文章正文内容,下面案例可供参考
一、主业务代码实现步骤
设计一个类,可以完成数据的封装 设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能 读取文件,生产数据对象 行数据需求的逻辑计算(计算每一天的销售额) 通过pyecharts进行图形绘制
二、数据封装
1.创建Record类
构造函数
构造函数是以双下划线(
__
)开头的类函数。构造函数的名称是__init__()
。创建对象时,如果需要,构造函数可以接受参数。当创建没有构造函数的类时,Python会自动创建一个不执行任何操作的默认构造函数。
每个类必须有一个构造函数,即使它只依赖于默认构造函数。
转载于:https://www.cnblogs.com/yanhuidj/p/8880775.html
代码如下(示例):
class Record:
"""
第一种方式:在外部进行成员变量的定义
第二种方式:构造函数内部定义成员变量
"""
def __init__(self,date,order_id,money,province):
self.date = date #订单日期
self.order_id = order_id #订单ID
self.money = money #订单金额
self.province = province #订单身份
def __str__(self):
return f"{self.date},{self.order_id},{self.money},{self.province}"
三、文件读取
1.导包
代码如下(示例):
import json
from data_define import Record
2.定义一个抽象类
定义一个抽象类来做顶层设计,确定有哪些功能需要实现
抽象类的标志:方法里面包含pass
代码如下(示例):
class FileReader:
def read_date(self):
"""读取文件的数据,将读到的每一条数据转换为Record对象,将它们封装list内并返回"""
pass #抽象类的标志
3.文本文件读取
子类TextFileReader继承父类FileReader
实现父类的方法read_date()
strip方法:
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法:
str.strip([chars]);
参数值:
- chars -- 移除字符串头尾指定的字符序列。
返回值:
返回移除字符串头尾指定的字符生成的新字符串。
split方法:
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符
语法:
str.split(str="", num=string.count(str)).
参数:
- str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
- num -- 分割次数。默认为 -1, 即分隔所有。
返回值:
返回分割后的字符串列表。
append方法:
append() 方法用于在列表末尾添加新的对象。
语法:
list.append(obj)
参数值:
- obj -- 添加到列表末尾的对象。
返回值:
该方法无返回值(None),但是会修改原来的列表。
代码如下(示例):
class TextFileReader(FileReader):
def __init__(self,path):
self.path = path #定义成员变量记录文件的路径
#实现父类的方法
def read_date(self):
record_list :list[Record] = []
f = open(self.path,"r",encoding="UTF-8")
for line in f.readlines():
line = line.strip() #处理回车换行符
data_list = line.split(",")
record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3])
record_list.append(record)
f.close()
return record_list
4.JSON文件读取
子类JsonFileReader继承父类FileReader
实现父类的方法read_date()
JSON 函数
使用 JSON 函数需要导入 json 库:import json。
函数 | 描述 |
---|---|
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
json 类型转换到 python 的类型对照表:
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |
代码如下(示例):
class JsonFileReader(FileReader):
def __init__(self,path):
self.path = path #定义成员变量记录文件的路径
def read_date(self):
record_list: list[Record] = []
f = open(self.path, "r", encoding="UTF-8")
for line in f.readlines():
data_dict = json.loads(line)
record = Record(data_dict["date"],data_dict["order_id"],data_dict["money"],data_dict["province"])
record_list.append(record)
f.close()
return record_list
四、读取计算数据
1.导包
代码如下(示例):
rom file_define import FileReader,TextFileReader,JsonFileReader
from data_define import Record
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType
2.创建文件对象
传入文件路径,调用类的构造函数。
代码如下(示例):
text_file_reader = TextFileReader("D:/desktop/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("D:/desktop/2011年2月销售数据JSON.txt")
调用read_date()方法实现文件读取
代码如下(示例):
jan_1 = text_file_reader.read_date()
feb_2 = json_file_reader.read_date()
#将两个月份的数据合并为一个List
all_data = jan_1 + feb_2
进行数据计算
#开始进行数据计算
data_dict = {}
for record in all_data:
if record.date in data_dict.keys():
#当前日期已经有记录,通过老记录进行累加
data_dict[record.date] += record.money
else:
data_dict[record.date] = record.money
可视化图表开发
设置图表主题:init_opts=InitOpts(theme=ThemeType.LIGHT)
设置标签:label_opts=LabelOpts(is_show=False)
设置全局样式:set_global_opts()
#可视化图表开发
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))
bar.add_xaxis(list(data_dict.keys()))
bar.add_yaxis("销售额",list(data_dict.values()),label_opts=LabelOpts(is_show=False))
bar.set_global_opts(
title_opts=TitleOpts(title = "每日销售额")
)
bar.render()
运行示例:
总结
以上为我的学习笔记。