2017-08-28 15 views
0

私はpandasモジュールが初めてで、職場でのデータ分析にこのモジュールを使用しています。私はアクセスデータベースから毎日データをインポートし、マシンがダウンするたびに新しいレコードが挿入されるExcelテーブルを持っています。現在の週が8である場合、テーブルは、基本的に、それはのMachine1 1,2-ため-2,3,5,6,7,8-週間スキップした、各マシン上から値に基づいて行を挿入し、他の列を更新しますか?

ID | Area | Machine | Week | UTPercent 
-------------------------------------- 
1 | A1 | M1 | 1 | 80 
2 | A1 | M1 | 4 | 90 
3 | A2 | M2 | 4 | 70 
4 | A2 | M2 | 8 | 82 

の稼働時間の割合を示し、 Machine2の場合は3,5,6,7です。どのように私は真ん中に行を追加し、これらすべての行に応じてUTPercentを100%としますか?言い換えれば、ここに私が必要なものがあります。

ID | Area | Machine | Week | UTPercent 
-------------------------------------- 
1 | A1 | M1 | 1 | 80 
2 | A1 | M1 | 2 | 100 
3 | A1 | M1 | 3 | 100 
4 | A1 | M1 | 4 | 90 
5 | A1 | M1 | 5 | 100 
6 | A1 | M1 | 6 | 100 
7 | A1 | M1 | 7 | 100 
8 | A1 | M1 | 8 | 100 
9 | A1 | M2 | 1 | 100 
10 | A2 | M2 | 2 | 100 
11 | A2 | M2 | 3 | 100 
12 | A2 | M2 | 4 | 70 
13 | A2 | M2 | 5 | 100 
14 | A2 | M2 | 6 | 100 
15 | A2 | M2 | 7 | 100 
16 | A2 | M2 | 8 | 82 

また、Area1のMachine1だけをプロットする場合、データラベルを追加するにはどうすればよいですか?私は週(x軸)と稼働率(y軸)の棒グラフを作った。私はデータラベルとして週が必要です。 (あなたのテーブルがuptimesと呼ばれていると仮定して)私はこのような何かをしたい最初の問題については

import matplotlib.plot as plt 
import pandas as pd 

df = pd.read_excel("targetFolder.xlsx", sheetname = 0, sep ='|') 

area1 = df.loc[df['Area'] == 'A1'] 

# the data 

data = list(area1['UTPercent']) 
weekNum = list(df.Week) 

## the bars 
fig = plt.figure() 
ax1 = fig.add_subplot(111) 
plotData = ax1.bar(weekNum, data, width = 0.45, 
color='#556B2F') 

# adding labels and title 
ax1.set_xlabel("Weeks") 
ax1.set_ylabel("Uptime Percentage") 
ax1.set_title("Metrology Area", weight='bold') 

fig.tight_layout() 
fig.gca() 
+0

2つの問題を別々に処理します。1)障害データから「Machine x was week in z」データに移動する方法。 2)そのデータの最後の3週間をプロットする方法。 最初の問題は、コードの前に推論することです。既にマシンの完全なリストを持っているのですか、またはそれらはサービスに出入りしますか?ある週のすべてのデータを読んだことをどのように知っていますか?これはあなたの職場に関する実用的な知識です。 – cphlewis

+0

こんにちは、私はそれを明確にするために質問を再構成しました。それが役に立てば幸い :)。混乱させて申し訳ありません。 – SalN85

+0

あなたが解決してくれることを私たちに明確にするために質問を再構成しておけば(これは非常に自然なプログラミング戦略です) – cphlewis

答えて

0

:ここ

は、私がこれまでに行ったことある

INSERT INTO uptimes (Week, Machine, Area, UTPercent) 
    (SELECT SeqValue AS Week, 
      machines.Machine, 
      machines.Area, 
      100 AS UTPercent 
    FROM 
     (SELECT (TWO_1.SeqValue + TWO_2.SeqValue + TWO_4.SeqValue + TWO_8.SeqValue + TWO_16.SeqValue + TWO_32.SeqValue) SeqValue 
      FROM 
       (SELECT 0 SeqValue 
       UNION ALL SELECT 1 SeqValue) TWO_1 
      CROSS JOIN 
       (SELECT 0 SeqValue 
       UNION ALL SELECT 2 SeqValue) TWO_2 
      CROSS JOIN 
       (SELECT 0 SeqValue 
       UNION ALL SELECT 4 SeqValue) TWO_4 
      CROSS JOIN 
       (SELECT 0 SeqValue 
       UNION ALL SELECT 8 SeqValue) TWO_8 
      CROSS JOIN 
       (SELECT 0 SeqValue 
       UNION ALL SELECT 16 SeqValue) TWO_16 
      CROSS JOIN 
       (SELECT 0 SeqValue 
       UNION ALL SELECT 32 SeqValue) TWO_32 
      HAVING SeqValue <= 
       (SELECT max(week) 
       FROM uptimes) 
      AND SeqValue > 0) AS integers 
    LEFT JOIN 
     (SELECT Machine, 
       Area 
      FROM uptimes 
      GROUP BY 1, 
        2) AS machines ON 1=1 
    LEFT JOIN uptimes ON uptimes.week = integers.SeqValue 
    AND machines.Machine = uptimes.Machine 
    WHERE uptimes.week IS NULL); 

方法、それ作品:

  1. は、1からテーブルの中で最も高い週の整数を生成します(ユニオンで選択)
  2. あなたのテーブルから(SELECTマシン、面積...)
  3. クロスは、両方(すべての可能な組み合わせが
  4. フィルターうち、既に存在しているもの(1 = 1に登録しよう)を取得する稼働時間に参加するすべてのマシンと面積をゲット.week)がヌルである
  5. 他の問題のために(挿入)テーブルに

の結果を挿入します。パンダプロット機能を使用してみてください。

df = pd.read_excel("targetFolder.xlsx", sheetname = 0, sep ='|') 
area1 = df[df.Area == 'A1'] 
area1.set_index('Week')['UTPercent'].plot(kind='bar') 
関連する問題