Commit f0876a65 authored by zhangshuo's avatar zhangshuo

备注

parent 91c7d6fb
### python3环境
> pip3 install -r requirements.txt
入口文件 main_analysis.py
from load_data import LoadData from load_data import LoadData
###
# 分析策略相关的集合类
###
def count_in_dict(data_dict, dict_key, step_value=1): def count_in_dict(data_dict, dict_key, step_value=1):
if dict_key in data_dict: if dict_key in data_dict:
......
import pyecharts.options as opts import pyecharts.options as opts
from pyecharts.charts import Line, Pie, Page from pyecharts.charts import Line, Pie, Page
# 相关的配置地址:https://pyecharts.org/#/zh-cn/intro
# 用于封装 pyecharts 相关的方法
class EChartDraw(object): class EChartDraw(object):
def __init__(self, result_path): def __init__(self, result_path):
self.page = Page(layout=Page.DraggablePageLayout) self.page = Page(layout=Page.DraggablePageLayout)
self.result_path = result_path self.result_path = result_path
# 绘制饼状图
def draw_pie_chart(self, title_name, data_dict): def draw_pie_chart(self, title_name, data_dict):
x_data = sorted(data_dict) x_data = sorted(data_dict)
y_data = [] y_data = []
...@@ -19,6 +22,7 @@ class EChartDraw(object): ...@@ -19,6 +22,7 @@ class EChartDraw(object):
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}({d}%)")) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}({d}%)"))
self.page.add(pie) self.page.add(pie)
# 绘制折线图
def draw_line_chart(self, title_name, data_dict): def draw_line_chart(self, title_name, data_dict):
x_data = sorted(data_dict) x_data = sorted(data_dict)
y_data = [] y_data = []
......
...@@ -4,7 +4,6 @@ import csv ...@@ -4,7 +4,6 @@ import csv
# 读取数据 # 读取数据
class LoadData(object): class LoadData(object):
def __init__(self, file_path): def __init__(self, file_path):
self.file_path = file_path self.file_path = file_path
...@@ -18,12 +17,16 @@ class LoadData(object): ...@@ -18,12 +17,16 @@ class LoadData(object):
# 去除0元领,1元抽奖,服务费 # 去除0元领,1元抽奖,服务费
self.real_data_dict = [] self.real_data_dict = []
# 初始化处理原始数据
def __build_re_buy_data(self): def __build_re_buy_data(self):
print("初始化数据>", self.title_list)
# 需要去除价格为0的 # 需要去除价格为0的
for data in self.data_list: for data in self.data_list:
# 服务费等这些0元的数据删除
if float(data['价格']) == 0.0: if float(data['价格']) == 0.0:
print("删除价格为0 ", data) print("删除价格为0 ", data)
self.data_list.remove(data) self.data_list.remove(data)
# 识别一口价212商品还是拍卖212商品
if data['itemtype'] == '53': if data['itemtype'] == '53':
data['商品类型'] = '212商品_一口价' data['商品类型'] = '212商品_一口价'
elif data['itemtype'] == '51': elif data['itemtype'] == '51':
...@@ -55,6 +58,7 @@ class LoadData(object): ...@@ -55,6 +58,7 @@ class LoadData(object):
sorted(item_list, key=lambda item: item['付费时间']) sorted(item_list, key=lambda item: item['付费时间'])
self.real_data_dict[user_id] = item_list self.real_data_dict[user_id] = item_list
# 读取csv文件(私有方法)
def __load_csv(self): def __load_csv(self):
with open(self.file_path) as file: with open(self.file_path) as file:
file_csv = csv.reader(file) file_csv = csv.reader(file)
...@@ -66,15 +70,13 @@ class LoadData(object): ...@@ -66,15 +70,13 @@ class LoadData(object):
self.data_list.append(data) self.data_list.append(data)
self.__build_re_buy_data() self.__build_re_buy_data()
# 读取xlsx文件(私有方法)
def __load_xlsx(self): def __load_xlsx(self):
workbook = xlrd.open_workbook(self.file_path) workbook = xlrd.open_workbook(self.file_path)
sheet = workbook.sheet_by_index(0) sheet = workbook.sheet_by_index(0)
print('行数:', sheet.nrows, "列数:", sheet.ncols)
# 获取标题 # 获取标题
for column in range(sheet.ncols): for column in range(sheet.ncols):
self.title_list.append(sheet.cell(0, column).value) self.title_list.append(sheet.cell(0, column).value)
print('标题:', self.title_list)
for row in range(1, sheet.nrows, 1): for row in range(1, sheet.nrows, 1):
data = {} data = {}
for colum in range(sheet.ncols): for colum in range(sheet.ncols):
...@@ -82,6 +84,7 @@ class LoadData(object): ...@@ -82,6 +84,7 @@ class LoadData(object):
self.data_list.append(data) self.data_list.append(data)
self.__build_re_buy_data() self.__build_re_buy_data()
# 读取数据(判断文件格式,加载不同读取方法)
def load(self): def load(self):
self.title_list = [] self.title_list = []
self.data_list = [] self.data_list = []
...@@ -94,6 +97,7 @@ class LoadData(object): ...@@ -94,6 +97,7 @@ class LoadData(object):
else: else:
print("读取失败,不支持该文件类型>>", self.file_path) print("读取失败,不支持该文件类型>>", self.file_path)
# 是否是0元领或者其他非常规的商品
def is_zero_buy(self, data): def is_zero_buy(self, data):
data_name = data['订单名称'] data_name = data['订单名称']
data_price = float(data['价格']) data_price = float(data['价格'])
......
...@@ -5,6 +5,7 @@ from echart_draw import EChartDraw ...@@ -5,6 +5,7 @@ from echart_draw import EChartDraw
from load_data import LoadData from load_data import LoadData
# 分析数据的方法集合
def analysis_list(load_data, result_path): def analysis_list(load_data, result_path):
chart = EChartDraw('./result/' + result_path) chart = EChartDraw('./result/' + result_path)
analysis_classify(load_data, chart) analysis_classify(load_data, chart)
...@@ -16,11 +17,14 @@ def analysis_list(load_data, result_path): ...@@ -16,11 +17,14 @@ def analysis_list(load_data, result_path):
if __name__ == "__main__": if __name__ == "__main__":
# 读取文件 # 遍历当前文件夹下所有文件
for root, dirs, files in os.walk('csv'): for root, dirs, files in os.walk('csv'):
for file in files: for file in files:
# 当前需要处理的文件
csv_path = os.path.join(root, file) csv_path = os.path.join(root, file)
result_file_name = file.replace('.csv', '_result.html') result_file_name = file.replace('.csv', '_result.html')
# 读取数据(支持csv和xlsx两个文件格式)
load_data = LoadData(csv_path) load_data = LoadData(csv_path)
load_data.load() load_data.load()
# 分析数据
analysis_list(load_data, result_file_name) analysis_list(load_data, result_file_name)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment