You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
5.3 KiB

# -*- coding: utf-8 -*-
3 years ago
import os
import re
import matplotlib
3 years ago
import pandas as pd
from matplotlib import pyplot as plt
import milkSpider
import settings
plt.rcParams['font.family'] = settings.FONT
3 years ago
# pd.set_option('display.expand_frame_repr', True)
# pd.set_option('display.max_colwidth', 10)
class view:
def __init__(self, itemList):
3 years ago
self.name = itemList[1]
self.string = itemList[10]
def getFont(): # 列出可用的字体
font = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])
for i in font:
print(i)
def main(self):
def str2data(string) -> list:
reg = r"[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)"
pattern = re.compile(reg)
return pattern.findall(string)
def show(itemList):
x = []
y = []
3 years ago
itemList.pop()
itemList.reverse()
3 years ago
for temp in itemList:
date = temp[0] + "" + temp[1] + ""
price = "" + temp[2] + ""
x.append(date)
y.append(price)
date = temp[3] + "" + temp[4] + ""
price = "" + temp[5] + ""
x.append(date)
y.append(price)
3 years ago
plt.title("商品 [{}] 价格趋势".format(self.name))
plt.bar(x, y, color = 'g', align = 'center')
plt.xticks(size = 10.0, rotation = 45)
plt.xlabel("日期")
plt.ylabel("价格")
plt.plot(x, y, color = 'red', linewidth = 5.0, linestyle = '--')
3 years ago
print("等待可视化界面结束。。。")
plt.show()
3 years ago
if self.string == 0:
print("该商品历史价格趋势数据尚未被收录!")
return
itemList = []
3 years ago
print("以下是商品 [{}] 的历史价格趋势:".format(self.name))
for astr in self.string.split(';'):
strList = str2data(astr)
try:
print(astr)
itemList.append(strList)
except BaseException:
break
show(itemList)
3 years ago
def listCatalogues():
path = r"./Catalogues/"
dirList = os.listdir(path)
fileList = []
for filename in dirList:
fileList.append(path + filename)
return len(fileList), fileList
def getData(filename, catalogue):
while True:
print("# 当前选择的目录是 {} .".format(catalogue))
milkSpider.showBanner(menu = "view")
print("选择一项以查看or返回", end = '')
choice = str(input())
case = {'1': '评论数量(条)', '2': '价格(人民币)'}
if choice in case.keys():
mode = case.get(choice)
sort = False
break
elif choice == '3': return
else: print("无效选择!")
while True:
print("当前选择的模式是以 [{}] 为基准的排序方式".format(mode))
print("想要查看多少条数据(int)", end = '')
try:
flag = eval(input())
break
except BaseException:
print("无效输入!")
continue
df = pd.read_csv(filename, encoding = 'utf-8', header = 0, error_bad_lines = False)
if choice == '2': sort = True
dfnew = df.sort_values(by = mode, ascending = sort)
try:
dfnew = dfnew.fillna(0)
dfnew[["评论数量(条)"]] = dfnew[["评论数量(条)"]].astype(int)
except BaseException:
pass
dfnew = dfnew[:flag]
while True:
print(dfnew.iloc[:, [1, 2, 3]])
indexList = list(dfnew.index)
while True:
print("选择一项id以查看详细信息(或者 [r] 返回上层目录)", end = '')
try:
index = str(input())
index = eval(index)
if index in indexList:
break
else:
print("无效输入!")
continue
except BaseException:
if index == 'r': return
print("无效输入!")
continue
toShow = dfnew.loc[index]
print(toShow)
aitem = view(toShow)
aitem.main()
while True:
flag = str(input("输入 [r]返回上一级菜单 [c]继续查看: "))
if flag == 'r': return
elif flag == 'c': break
else: print("无效选项!")
def main():
length, fileList = listCatalogues()
while True:
print("检测到当前缓存中共有{}个目录:".format(length))
case = {}
for i in range(length):
print("# {}.{}".format(i + 1, fileList[i][13:-4]))
case[str(i+1)] = fileList[i]
print("# {}.输入 [r] 返回上一级菜单".format(i + 2))
print("选择一项以查看or返回", end = '')
choice = str(input())
if choice in case.keys():
getData(case.get(choice), case.get(choice)[13:-4])
elif choice == 'r': return
else: print("无效选择!")
if __name__ == "__main__":
# fileList = listCatalogues()
# length, dataList = getData(fileList)
main()
'''
# 数据调试
import pandas as pd
filename = "./Catalogues/milk.csv"
df = pd.read_csv(filename, encoding = 'utf-8', header = 0, error_bad_lines = False)
'''