Merge branch 'SPM-17'

This commit is contained in:
Johannes Theiner 2019-05-06 18:33:16 +02:00
commit a10f5f141c
4 changed files with 178 additions and 0 deletions

View File

@ -0,0 +1,39 @@
package de.hsel.spm.baudas.analysis;
/**
* @author Johannes Theiner
* @version 0.1
* @since 0.1
**/
public class Attribute {
static final int SEX = 0;
static final int AGE = 1;
static final int KIDS = 2;
static final int MARITAL_STATUS = 3;
static final int EMPLOYED = 4;
static final int SHOPPING_DAY = 5;
static final int SHOPPING_HOUR = 6;
static final int RESIDENCE = 7;
static final int HOUSEHOLD_INCOME = 8;
static final int REGULAR = 9;
static final int PURCHASE_AMOUNT = 10;
static final int POWER_TOOLS = 11;
static final int HARDWARE = 12;
static final int HAND_TOOLS = 13;
static final int SANITARY = 14;
static final int LOCKING = 15;
static final int TILES = 16;
static final int COLORS = 17;
static final int FITTINGS = 18;
static final int RENOVATION = 19;
static final int ELECTRICAL = 20;
static final int BUILDING_MATERIAL = 21;
static final int WOOD = 22;
static final int FLOORING = 23;
static final int LIGHTS = 24;
static final int GARDENING_TOOLS = 25;
}

View File

@ -0,0 +1,20 @@
package de.hsel.spm.baudas.analysis;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author Johannes Theiner
* @version 0.1
* @since 0.1
**/
@Data
@EqualsAndHashCode
@AllArgsConstructor
public class DayHour {
private String day;
private String hour;
}

View File

@ -0,0 +1,48 @@
package de.hsel.spm.baudas.analysis;
import weka.core.Instance;
import weka.core.Instances;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
/**
* Shopping Times Analysis.
*
* @author Johannes Theiner
* @version 0.1
* @since 0.1
**/
public class ShoppingTimes implements Analysis<Map<DayHour, Integer>> {
private Instances instances;
private Map<DayHour, Integer> result;
public ShoppingTimes(File file) {
instances = load(file);
}
/**
* get customer count at specific times.
*
* @return Map of Day-Hour Combinations and the corresponding customer count
*/
@Override
public Map<DayHour, Integer> getResult() {
if (result == null) {
result = new HashMap<>();
for(Instance instance : instances) {
DayHour dayHour = new DayHour(instance.stringValue(Attribute.SHOPPING_DAY), instance.stringValue(Attribute.SHOPPING_HOUR));
int tmp = 1;
if(result.containsKey(dayHour))
tmp = result.get(dayHour) + 1;
result.put(dayHour, tmp);
}
}
return result;
}
}

View File

@ -0,0 +1,71 @@
package de.hsel.spm.baudas.analysis;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.net.URL;
import java.time.Duration;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTimeout;
/**
* @author Karsten Eden
* @version 0.1
* @since 0.1
**/
class ShoppingTimesTest {
@Test
void test100() {
URL url = getClass().getClassLoader().getResource("kd100.csv");
assert url != null;
ShoppingTimes overview = new ShoppingTimes(new File(url.getFile()));
AtomicReference<Map<DayHour, Integer>> results = new AtomicReference<>();
assertTimeout(Duration.ofMillis(1700), () -> results.set(overview.getResult()));
assertEquals(4, results.get().get(new DayHour("Montag", "10-12 Uhr")));
assertEquals(9, results.get().get(new DayHour("Samstag", "12-14 Uhr")));
assertEquals(1, results.get().get(new DayHour("Donnerstag", "14-17 Uhr")));
assertEquals(3, results.get().get(new DayHour("Mittwoch", ">17 Uhr")));
assertEquals(6, results.get().get(new DayHour("Dienstag", "<10 Uhr")));
}
@Test
void test1000(){
URL url = getClass().getClassLoader().getResource("kd1000.csv");
assert url != null;
ShoppingTimes overview = new ShoppingTimes(new File(url.getFile()));
AtomicReference<Map<DayHour, Integer>> results = new AtomicReference<>();
assertTimeout(Duration.ofMillis(3000), () -> results.set(overview.getResult()));
assertEquals(37, results.get().get(new DayHour("Montag", "10-12 Uhr")));
assertEquals(87, results.get().get(new DayHour("Samstag", "12-14 Uhr")));
assertEquals(23, results.get().get(new DayHour("Donnerstag", "14-17 Uhr")));
assertEquals(18, results.get().get(new DayHour("Mittwoch", ">17 Uhr")));
assertEquals(18, results.get().get(new DayHour("Dienstag", "<10 Uhr")));
}
@Test
void test10000() {
URL url = getClass().getClassLoader().getResource("kd10000.csv");
assert url != null;
ShoppingTimes overview = new ShoppingTimes(new File(url.getFile()));
AtomicReference<Map<DayHour, Integer>> results = new AtomicReference<>();
assertTimeout(Duration.ofMillis(3000), () -> results.set(overview.getResult()));
assertEquals(303, results.get().get(new DayHour("Montag", "10-12 Uhr")));
assertEquals(737, results.get().get(new DayHour("Samstag", "12-14 Uhr")));
assertEquals(192, results.get().get(new DayHour("Donnerstag", "14-17 Uhr")));
assertEquals(199, results.get().get(new DayHour("Mittwoch", ">17 Uhr")));
assertEquals(149, results.get().get(new DayHour("Dienstag", "<10 Uhr")));
}
}