dsfdfw

Untitled

Jul 4th, 2024
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.43 KB | None | 0 0
  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import csv
  4.  
  5. data = {
  6. 'undercoverage1': [], 'consistency1': [], 'chi1': [], 'epsilon1': [],
  7. 'undercoverage2': [], 'consistency2': [], 'chi2': [], 'epsilon2': []
  8. }
  9.  
  10. with open('ihre_datei.csv', 'r') as file:
  11. csv_reader = csv.DictReader(file)
  12. for row in csv_reader:
  13. data['undercoverage1'].append(float(row['under1']))
  14. data['undercoverage2'].append(float(row['under2']))
  15. data['consistency1'].append(float(row['cons1']))
  16. data['consistency2'].append(float(row['cons2']))
  17. data['chi1'].append(float(row['chi']))
  18. data['chi2'].append(float(row['chi']))
  19. data['epsilon1'].append(float(row['epsilon']))
  20. data['epsilon2'].append(float(row['epsilon']))
  21.  
  22. print(data)
  23.  
  24. df1 = pd.DataFrame({
  25. 'undercoverage': data['undercoverage1'],
  26. 'consistency': data['consistency1'],
  27. 'chi': data['chi1'],
  28. 'epsilon': data['epsilon1']
  29. })
  30.  
  31. df2 = pd.DataFrame({
  32. 'undercoverage': data['undercoverage2'],
  33. 'consistency': data['consistency2'],
  34. 'chi': data['chi2'],
  35. 'epsilon': data['epsilon2']
  36. })
  37.  
  38. df = pd.concat([df1, df2], ignore_index=True)
  39.  
  40.  
  41. # Pareto-Frontier berechnen
  42. def pareto_frontier(df):
  43. pareto_front = []
  44. for i, row in df.iterrows():
  45. dominated = False
  46. for j, other in df.iterrows():
  47. if (other['undercoverage'] <= row['undercoverage'] and other['consistency'] <= row['consistency']) and (
  48. other['undercoverage'] < row['undercoverage'] or other['consistency'] < row['consistency']):
  49. dominated = True
  50. break
  51. if not dominated:
  52. pareto_front.append(row)
  53. pareto_front_df = pd.DataFrame(pareto_front)
  54. pareto_front_df = pareto_front_df.sort_values(by=['undercoverage'])
  55. return pareto_front_df
  56.  
  57.  
  58. pareto_df = pareto_frontier(df)
  59.  
  60. # Plot erstellen
  61. plt.figure(figsize=(12, 8))
  62. colors = plt.cm.tab20.colors
  63.  
  64. # Dictionary to store the labels to avoid duplication in the legend
  65. labels_dict = {}
  66.  
  67. # Punkte aus der ersten Liste (Kreise)
  68. for i, row in df1.iterrows():
  69. label = f"$\chi={row['chi']}, \epsilon={row['epsilon']}$"
  70. if label not in labels_dict:
  71. labels_dict[label] = plt.scatter(row['undercoverage'], row['consistency'], color=colors[i % len(colors)], marker='o', s=100, label=label)
  72. else:
  73. plt.scatter(row['undercoverage'], row['consistency'], color=colors[i % len(colors)], marker='o', s=100)
  74.  
  75. # Punkte aus der zweiten Liste (Quadrate)
  76. for i, row in df2.iterrows():
  77. label = f"$\chi={row['chi']}, \epsilon={row['epsilon']}$"
  78. if label not in labels_dict:
  79. labels_dict[label] = plt.scatter(row['undercoverage'], row['consistency'], color=colors[i % len(colors)], marker='s', s=100, alpha=0.8, label=label)
  80. else:
  81. plt.scatter(row['undercoverage'], row['consistency'], color=colors[i % len(colors)], marker='s', s=100, alpha=0.8)
  82.  
  83. # Pareto-optimale Punkte hervorheben
  84. for i, row in pareto_df.iterrows():
  85. index_in_df1 = df1[(df1['undercoverage'] == row['undercoverage']) &
  86. (df1['consistency'] == row['consistency']) &
  87. (df1['chi'] == row['chi']) &
  88. (df1['epsilon'] == row['epsilon'])].index
  89. index_in_df2 = df2[(df2['undercoverage'] == row['undercoverage']) &
  90. (df2['consistency'] == row['consistency']) &
  91. (df2['chi'] == row['chi']) &
  92. (df2['epsilon'] == row['epsilon'])].index
  93.  
  94. if not index_in_df1.empty:
  95. color_index = index_in_df1[0] % len(colors)
  96. plt.scatter(row['undercoverage'], row['consistency'], color=colors[color_index], edgecolors='black',
  97. linewidths=2, alpha=0.6, s=150, marker='o')
  98. if not index_in_df2.empty:
  99. color_index = index_in_df2[0] % len(colors)
  100. plt.scatter(row['undercoverage'], row['consistency'], color=colors[color_index], edgecolors='black',
  101. linewidths=2, alpha=0.6, s=150, marker='s')
  102.  
  103. # Verbinde die Pareto-optimalen Punkte
  104. plt.plot(pareto_df['undercoverage'], pareto_df['consistency'], linestyle='-', marker='x', color='red', alpha=0.7)
  105.  
  106. # Legende außerhalb des Plots positionieren
  107. plt.legend(loc='center left', bbox_to_anchor=(1.02, 0.5), ncol=1)
  108.  
  109. plt.xlabel('Scaled Undercoverage')
  110. plt.ylabel('Scaled Consistency (ø Shift Changes)')
  111. plt.grid(True)
  112. plt.tight_layout()
  113. plt.show()
  114.  
Advertisement
Add Comment
Please, Sign In to add comment