Как создать круговую диаграмму с помощью Matplotlib из CSV - PullRequest
1 голос
/ 15 мая 2019

Пытался следовать здесь учебникам и ответам, но не мог обернуться, создав круговую диаграмму, основанную на моих данных из CSV. образец моего csv ниже

    post_id post_title  subreddit   polarity    subjectivity sentiment
0   bo7h4z  ['league']  soccer       -0.2             0.4    negative
1   bnvieg  ['césar']   soccer         0               0     neutral
2   bnup5q  ['foul']    soccer        0.1             0.6    positive
3   bnul4u  ['benfica'] soccer        0.45            0.5    positive
4   bnthuf  ['prediction']  soccer     0               0     neutral
5   bnolhc  ['revolution' ] soccer     0               0     neutral

Есть еще много строк, но мне нужно построить столбец чувств, в основном, сколько строк положительное, нейтральное или отрицательное

outfile = open("clean_soccer.csv","r", encoding='utf-8')
file=csv.reader(outfile)
next(file, None)

post_id = []
post_title = []
subreddit = []
polarity =[]
subjectivity = []
sentiment = []

for row in file:
    post_id.append(row[0])
    post_title.append(row[1])
    subreddit.append(row[2])
    polarity.append(row[3])
    subjectivity.append(row[4])
    sentiment.append(row[5])

plt.pie( , labels=)
plt.axis('equal') 
plt.show()

Было бы что-то похожее на это?

Редактировать: решение найдено

import pandas as pd
import matplotlib.pyplot as plt
import csv

df = pd.read_csv('clean_soccer.csv')
df['sentiment'].value_counts().plot.pie()

plt.show()

1 Ответ

1 голос
/ 15 мая 2019

Я дам краткий ответ, прочитав только в столбце sentiment.Вам нужно split, чтобы получить доступ к столбцу настроений с помощью индекса [5].Затем вы можете использовать Counter для вычисления частоты, а затем использовать значения для построения процентного соотношения на круговой диаграмме.

import csv
from collections import Counter

outfile = open("clean_soccer.csv","r", encoding='utf-8')
file=csv.reader(outfile)
next(file, None)

sentiment = []

for row in file:
    sentiment.append(row[0].split()[5])

counts = Counter(sentiment[:-1])
plt.pie(counts.values(), labels=counts.keys(), autopct='%1.1f%%',)
plt.axis('equal')
plt.show()

enter image description here

РЕДАКТИРОВАТЬ: Отвечая на ваш второй вопрос в комментариях ниже

df['sentiment'].value_counts().plot.pie(autopct='%1.1f%%',)
plt.axis('equal')
plt.show()
...