Python Forum
Program that calculates buildtime.
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Program that calculates buildtime.
#1
Hi
I am trying to make a program to calculate build time with old data from previous build.
But its not working as intended.

When i put in lesser values i get higher build time results.
And when i put in higher values i get lower build times.

I cant really understand why.

Can anyone help me with this?

The code so far
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
import os
import math

os.system(f'mode con: cols={119} lines={20}')


# Läs in historisk data från CSV-filen (ersätt med din faktiska filväg)
historical_data = pd.read_csv("historical_switch_gear_data.csv")

def main():
    # Extrahera relevanta kolumner
    X = historical_data[["Length", "Height", "CopperLength", "Breakers", "EarthBreakers", "elniva"]]
    y = historical_data["BuildTimeHours"]

    # Skala datan (valfritt, men rekommenderas för regression)
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)

    # Skapa en linjär regressionsmodell
    model = LinearRegression()
    model.fit(X_scaled, y)


    #El nivå
    print("Nivå på el:")
    print("1 - Utplintning av Huvudbrytare brytare")
    print("2 - ljusbågsvakt och utplintning av brytare")
    print("3 - ljusbågsvakt, utlösnings kretsar, utplintning")
    print("4 - ljusbågsvakt, utlösnings kretsar, utplintning, mätning och kommunikation")
    print("5 - ljusbågsvakt, utlösnings kretsar, utplintning, kommunikation och strömmätning med trafo")
    print("6 - ljusbågsvakt, utlösnings kretsar, till kretsar på HB, utplintning, mätning och kommunikation")
    print("7 - ljusbågsvakt, utlösnings kretsar, till kretsar på HB och utmatning, utplintning, mätning och kommunikation")
    print("8 - ljusbågsvakt, utlösnings kretsar, jorfelsmätning, utplintning, mätning och kommunikation")
    print("9 - ljusbågsvakt, utlösnings kretsar, jorfelsmätning, utplintning, mätning, kommunikation och larmtablå")
    print("10 - ljusbågsvakt, utlösnings kretsar, till kretsar på HB och utmatning, utplintning, kommunikation och jordfelsmätning")
    print("11 - Special")
    print("")

    # Användarinmatning för det nya ställverket
    new_data = pd.DataFrame({
        "Length": [float(input("Ange längd (modul): "))],
        "Height": [float(input("Ange höjd (modul): "))],
        "CopperLength": [float(input("Ange kopparlängd (meter): "))],
        "Breakers": [int(input("Ange antal brytare: "))],
        "EarthBreakers": [int(input("Ange antal jordomkopplare: "))],
        "elniva": [int(input("Ange nivån på el/utrustning: "))]
    })

    # Skala den nya datan
    new_data_scaled = scaler.transform(new_data)

    # Förutsäg byggtiden för det nya ställverket
    predicted_build_time = model.predict(new_data_scaled)
    print(f"Förväntad byggtid för det nya ställverket: {math.ceil(predicted_build_time[0])} timmar")

main()
The csv file data
Length,Height,CopperLength,Breakers,EarthBreakers,BuildTimeHours,elniva
50,12,380,22,2,820,4
21,12,300,22,0,123,3
40,12,280,34,2,490,4
25,12,140,22,2,445,4
13,11,102,7,0,160,3
25,12,380,20,2,497,4
73,30,540,26,4,1800,11
54,22,450,70,4,670,4
63,31,516,41,2,568,11
Reply
#2
I ran your program using the data from you post and get fairly good results when I enter the same data as new data.
import pandas as pd
from io import StringIO
from sklearn.linear_model import LinearRegression

data = StringIO("""
Length,Height,CopperLength,Breakers,EarthBreakers,BuildTimeHours,elniva
50,12,380,22,2,820,4
21,12,300,22,0,123,3
40,12,280,34,2,490,4
25,12,140,22,2,445,4
13,11,102,7,0,160,3
25,12,380,20,2,497,4
73,30,540,26,4,1800,11
54,22,450,70,4,670,4
63,31,516,41,2,568,11
""")

data = pd.read_csv(data)
data = data[["Length", "Height", "CopperLength", "Breakers", "EarthBreakers", "elniva", "BuildTimeHours"]]
x = data.drop(["BuildTimeHours"], axis=1)
y = data["BuildTimeHours"]

model = LinearRegression()
model.fit(x, y)

for d, estimate in zip(data.values, model.predict(x)):
    print(d, estimate)
Output:
Length Height CopperLength Breakers EarthBreakers elniva BuildTimeHours [ 50 12 380 22 2 4 820] 909.061972319817 [ 21 12 300 22 0 3 123] 5.891296734403795 [ 40 12 280 34 2 4 490] 401.0716782096414 [ 25 12 140 22 2 4 445] 458.7502551875755 [ 13 11 102 7 0 3 160] 205.10526320346838 [ 25 12 380 20 2 4 497] 550.0839462608542 [ 73 30 540 26 4 11 1800] 1712.6747661304726 [ 54 22 450 70 4 4 670] 685.321793807401 [ 63 31 516 41 2 11 568] 645.039028146366
I think the problem is that you don't have enough information in your data to properly train your model. For example, the model things EarthBreakers are really, really expensive timewise. When you cut down on those, the build hours plummet. But maybe build time goes up when you have more earth breakers because you also have more copper on those jobs.
Reply
#3
Yea thats one problem. And its not like a couple of houres it a lot between 1 and 0 earthbreakers. from real life experiance its around 8 houres for one earthbreaker.
deanhystad write Apr-28-2024, 04:27 PM:
Use the new post button instead of the reply button unless you reference something from a previous post. Even then, edit the reply to only the parts of the post you reference.
Reply
#4
Can I ask a question, because I am having some similar doubts?
Reply
#5
(Apr-28-2024, 10:37 AM)RileyBowen Wrote: Can I ask a question, because I am having some similar doubts?

yea sure
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020