2017-01-16 13 views
-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()' 
+1

"グラフが正確に表示されていません"は十分な問題の説明ではありません。元のファイルを使用しているときにプロットがうまくいくと言っているので、この問題は "section1"に関連しているため、このセクションでは "section2"はすべて役に立ちません。その代わりに、[MCVE]を作成して、csvファイルに2つのデータ行だけを使用してみてください。 "section1"の出力を期待どおりに比較してみてください。また、あなたが質問で期待していることを明確に述べて、forループの字下げのために上記のコードを修正してください。 – ImportanceOfBeingErnest

+0

この全体が完全なプログラムです。私が言うことは、セクション1を.pyファイルから削除して、正しいカウントを表示するグラフを取得するということです。セクション1を含めると、それが意味をなさえすれば、私はより低いカウントを取得します。たとえば、円グラフのdisplaydが221だった場合のHandHeldブラウザの数ですが、正しい数字は240ですが、スクリプトからセクション1を削除すると正しい数字が表示されますが、IDは両方とも1つのスクリプトにあります。だから何らかの理由でセクション1がカウントを歪めている – user2273231

答えて

-1

ソリューションはwriter'after各」デルを追加しました重複データベースの作成

関連する問題