-3
私はPythonの初心者です。質問があります。重複を削除し、削除された重複CSVファイルを保存してから、正しいCSVファイルをロードしてグラフを生成して、CSVファイルからデータをロードしています。しかし、私の問題は、グラフが正しく表示されていないことです。合計が間違っているためです。私はプログラムが正しく動作していることを知っています。セクション1を削除すると(#section1については下記を参照してください)、正しいデータが表示されるためです。セクション1で何がデータを歪めているのかわかりません。どんな助けでも大歓迎です。ありがとう。Python - データが正しく表示されない(Matplotlib)
要約:セクション1とセクション2を同じpyファイルで実行することはできません。それ以外の場合は、データが正しく集計されません。理由を知りたいですか?別々のpyファイルを実行しないで避ける方法。
from collections import Counter
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import csv
import itertools
第1
# Create database of duplicates - check if the mac and os pairs have duplicates
reader = csv.reader(open('Workbook1.csv', 'r'), delimiter=',')
writer = csv.writer(open('remacos.csv', 'w'), delimiter=',')
entries = set()
for row in reader:
key = (row[1], row[2])
if key not in entries:
writer.writerow(row)
entries.add(key)
entries.clear()
# Create database of duplicates - check if the mac and browser pairs have duplicates
reader = csv.reader(open('Workbook1.csv', 'r'), delimiter=',')
writer = csv.writer(open('remacbrowser.csv', 'w'), delimiter=',')
entries = set()
for row in reader:
key = (row[1], row[3])
if key not in entries:
writer.writerow(row)
entries.add(key)
第2
# Read Removed Duplicated entries Database and Count Values for OS.
df = pd.read_csv('remacos.csv', index_col="mac")
counteros = Counter(df['os'])
os_names = counteros.keys()
os_counts = counteros.values()
# Read Removed Duplicated entries Database and Count Values for Browsers.
df = pd.read_csv('remacbrowser.csv', index_col="mac")
counterbrowsers = Counter(df['browser'])
browser_names = counterbrowsers.keys()
browser_counts = counterbrowsers.values()
2つの棒グラフを作成し、円グラフ
# Plot histogram using matplotlib bar() for OS.
indexes = np.arange(len(os_names))
width = 0.7
plt.bar(indexes, os_counts, width)
plt.xticks(indexes + width * 0.5, os_names)
plt.show()
# Plot histogram using matplotlib bar() for Browsers.
indexes = np.arange(len(browser_names))
width = 0.7
plt.bar(indexes, browser_counts, width)
plt.xticks(indexes + width * 0.5, browser_names)
plt.show()
# Make Pie Chart for OS's
plt.figure()
values = os_counts
labels = os_names
def make_autopct(values):
def my_autopct(pct):
total = sum(values)
val = int(round(pct*total/100.0))
return '{p:.2f}% ({v:d})'.format(p=pct,v=val)
return my_autopct
plt.pie(values, labels=labels, autopct=make_autopct(values))
#plt.pie(values, labels=labels) #autopct??
plt.show()
# Make Pie Chart for Browsers
plt.figure()
values = browser_counts
labels = browser_names
def make_autopct(values):
def my_autopct(pct):
total = sum(values)
val = int(round(pct*total/100.0))
return '{p:.2f}% ({v:d})'.format(p=pct,v=val)
return my_autopct
plt.pie(values, labels=labels, autopct=make_autopct(values))
#plt.pie(values, labels=labels) #autopct??
plt.show()'
"グラフが正確に表示されていません"は十分な問題の説明ではありません。元のファイルを使用しているときにプロットがうまくいくと言っているので、この問題は "section1"に関連しているため、このセクションでは "section2"はすべて役に立ちません。その代わりに、[MCVE]を作成して、csvファイルに2つのデータ行だけを使用してみてください。 "section1"の出力を期待どおりに比較してみてください。また、あなたが質問で期待していることを明確に述べて、forループの字下げのために上記のコードを修正してください。 – ImportanceOfBeingErnest
この全体が完全なプログラムです。私が言うことは、セクション1を.pyファイルから削除して、正しいカウントを表示するグラフを取得するということです。セクション1を含めると、それが意味をなさえすれば、私はより低いカウントを取得します。たとえば、円グラフのdisplaydが221だった場合のHandHeldブラウザの数ですが、正しい数字は240ですが、スクリプトからセクション1を削除すると正しい数字が表示されますが、IDは両方とも1つのスクリプトにあります。だから何らかの理由でセクション1がカウントを歪めている – user2273231