diff --git a/main.py b/main.py new file mode 100644 index 0000000..45aed2e --- /dev/null +++ b/main.py @@ -0,0 +1,78 @@ +import matplotlib.pyplot as plt +from flask import Flask +from flask import render_template +from flask import Response +import sqlite3 +import io + +from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas + +app = Flask(__name__) + + +@app.route("/") +def cv_index(): + cvs = get_cv() + res = "" + for i, cv in enumerate(cvs): + res += f"

{i + 1})

" + res += f"

Желаемая зарплата: asdasdasdsada {cv['salary']}.

" + res += f"

Образование: {cv['educationType']}.

" + + return res + + +@app.route("/dashboard") +def dashboard(): + data = [] + with sqlite3.connect('works.sqlite') as con: + data=list(con.execute('SELECT SUBSTR(dateModify, 1, 4), COUNT(*) FROM works WHERE dateModify NOT NULL GROUP BY SUBSTR(dateModify, 1, 4)')) + return render_template('d3.html', + cvs=get_cv(), + data=[row[1] for row in data], + labels=[row[0] for row in data] + ) + + +def dict_factory(cursor, row): + # обертка для преобразования + # полученной строки. (взята из документации) + d = {} + for idx, col in enumerate(cursor.description): + d[col[0]] = row[idx] + return d + + +def get_cv(): + con = sqlite3.connect('works.sqlite') + con.row_factory = dict_factory + res = list(con.execute('select * from works limit 20')) + con.close() + return res + + +@app.route('/plot.png') +def plot_png(): + fig = create_figure() + output = io.BytesIO() + FigureCanvas(fig).print_png(output) + return Response(output.getvalue(), mimetype='image/png') + + +def create_figure(): + with sqlite3.connect('works.sqlite') as con: + (men_salary, men_count) = zip(*list(con.execute( + 'select salary,count(salary) from works where gender = "Мужской" group by salary'))) + (women_salary, women_count) = zip(*list(con.execute( + 'select salary,count(salary) from works where gender = "Женский" group by salary'))) + + plt.plot(men_salary, men_count, color='r', label='Мужчины-высшее') + plt.plot(women_salary, women_count, color='b', label='Женщины-высшее', linestyle='dashed') + plt.xlabel('Зарплата') + plt.ylabel("Кол-во") + plt.title("Разброс зарплат") + plt.legend() + return plt.gcf() + + +app.run() \ No newline at end of file diff --git a/templates/d3.html b/templates/d3.html index 1a95210..f09adb2 100644 --- a/templates/d3.html +++ b/templates/d3.html @@ -200,25 +200,11 @@

Резюме

var myChart = new Chart(ctx, { type: 'line', data: { - labels: [ - 'Sunday', - 'Monday', - 'Tuesday', - 'Wednesday', - 'Thursday', - 'Friday', - 'Saturday' - ], + {% autoescape false %} + labels: {{ labels }} + {% endautoescape %}, datasets: [{ - data: [ - 15339, - 21345, - 18483, - 24003, - 23489, - 24092, - 12034 - ], + data: {{ data }}, lineTension: 0, backgroundColor: 'transparent', borderColor: '#007bff', diff --git a/works.sqlite b/works.sqlite new file mode 100644 index 0000000..9e77d62 Binary files /dev/null and b/works.sqlite differ