Частотный график с использованием matplotlib в python - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь нарисовать график частотной линии, используя matplotlib, где ось X - это сумма (loan_amount), а ось Y - количество вхождений этой суммы (loan_count), но я не убедитесь, как использовать количество вхождений в качестве значений y.

Я думаю, что общий код должен начинаться примерно так, но я не уверен, каким должен быть y и как его завершить:

con = sqlite3.connect('databaseTest.db')
cur = con.cursor()
cur.execute("SELECT LOAN_AMOUNT FROM funded")
loan_amount = cur.fetchall()
loan_amount_list = [i[0] for i in loan_amount]

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
x = loan_amount_list

Я хочу, чтобы окончательный сюжет выглядел так:

Frequency Plot

Любая помощь очень ценится! Спасибо!

- Изменить:

Реализация функции счетчика из коллекций, как предлагается ниже, приводит к следующему графику, который не является тем, к чему я стремлюсь: Wrong plot

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Я не знаю, что находится в вашей базе данных, в каком формате (если вы отправите сообщение, я изменю свой ответ), но вот как я могу решить эту проблему.

Я предполагаю, что в SELECT LOAN_AMOUNT FROM funded, LOAN_AMOUNT - это некий целочисленный столбец.

Итак:

import numpy as np
import matplotlib.pyplot as plt
loan_amount = cur.fetchall()
loan_amount = np.array(loan_amount,dtype='int') #setting up the array in numpy
x ,y  = np.unique(loan_amount, return_counts=True) # counting occurrence of each loan
plt.scatter(x,y)

Если я добавлю несколько случайно распределенных данных в этот фрагмент, я получу следующую картину, которую вы, вероятно, искали:

enter image description here

>>> a = np.random.rayleigh(1000,100000)
>>> a = a.astype('int')
>>> x ,y = np.unique(a,return_counts=True)
>>> plt.scatter(x,y)
<matplotlib.collections.PathCollection object at 0x7f3b18a524e0>
>>> plt.show()
>>> 

Линейный график немного запутан, но от вашего набора данных зависит, как будет выглядеть результат:

enter image description here

0 голосов
/ 29 июня 2018

То, что вы сделали неправильно, касается оси y. Вы должны использовать функцию numpy.linespace (). Вы должны написать что-нибудь об этом. Извините, но я не могу проверить прямо сейчас.

 y = numpy.linspace(0, x[-1], x.size)
...