In [1]:
import hkvfewspy as hkv
import pandas as pd
%matplotlib inline

In [2]:
hkv.__version__


Out[2]:
'0.6.0'

In [3]:
# define object
pi = hkv.Pi()

In [4]:
# create empty PI-TimeSeries object
pi_ts = pi.setPiTimeSeries(prefill_defaults=False)

In [5]:
s = pd.Series(data=pd.np.random.randint(0,100, size=(5)), 
              index=pd.date_range(start='2018-01-01', periods=5, freq='D'),
              name='value')

In [6]:
s.head()


Out[6]:
2018-01-01    95
2018-01-02    49
2018-01-03    29
2018-01-04    62
2018-01-05    92
Freq: D, Name: value, dtype: int32

In [7]:
# set two root objects
pi_ts.write.root.timeZone('gmt')
pi_ts.write.root.version('1.22')
pi_ts.write.root.geoDatum('WGS 1984')

# set comment
pi_ts.write.comment('this is an comment')

# set a header object
pi_ts.write.header.timeSeriesType("instantaneous")
pi_ts.write.header.moduleInstanceId('my_little_moduleinstanceID')
pi_ts.write.header.locationId('my_little_locationID')
pi_ts.write.header.parameterId('my_little_parameterID')
pi_ts.write.header.timeStep(unit="day")
pi_ts.write.header.startDate(date='2018-01-01', time='00:00:00')
pi_ts.write.header.endDate(date='2018-01-05', time='00:00:00')
pi_ts.write.header.missVal(pd.np.nan)
pi_ts.write.header.longName('my_longname_locationID')
pi_ts.write.header.units('m/3')

# set a events object (pandas.Series or pandas.DataFrame)
pi_ts.write.events(s)

In [8]:
pi_ts.view


Out[8]:
{'timeZone': 'gmt',
 'version': '1.22',
 'geoDatum': 'WGS 1984',
 'timeSeries': [{'comment': 'this is an comment',
   'header': {'type': 'instantaneous',
    'moduleInstanceId': 'my_little_moduleinstanceID',
    'locationId': 'my_little_locationID',
    'parameterId': 'my_little_parameterID',
    'timeStep': {'unit': 'day', 'divider': 1, 'multiplier': 1},
    'startDate': {'date': '2018-01-01', 'time': '00:00:00'},
    'endDate': {'date': '2018-01-05', 'time': '00:00:00'},
    'missVal': nan,
    'longName': 'my_longname_locationID',
    'units': 'm/3'},
   'events':             value
   datetime         
   2018-01-01     95
   2018-01-02     49
   2018-01-03     29
   2018-01-04     62
   2018-01-05     92}]}

In [9]:
pi_ts.view['timeSeries'][0]['events'].head() # pandas.DataFrame


Out[9]:
value
datetime
2018-01-01 95
2018-01-02 49
2018-01-03 29
2018-01-04 62
2018-01-05 92

In [10]:
pi_ts.view['timeSeries'][0]['events'].plot()


Out[10]:
<matplotlib.axes._subplots.AxesSubplot at 0x9b20a90>

In [11]:
# show resulted PI-JSON object
print(pi_ts.to.pi_json())


{
    "geoDatum": "WGS 1984",
    "timeSeries": [
        {
            "comment": "this is an comment",
            "events": [
                {
                    "date": "2018-01-01",
                    "time": "00:00:00",
                    "value": 95
                },
                {
                    "date": "2018-01-02",
                    "time": "00:00:00",
                    "value": 49
                },
                {
                    "date": "2018-01-03",
                    "time": "00:00:00",
                    "value": 29
                },
                {
                    "date": "2018-01-04",
                    "time": "00:00:00",
                    "value": 62
                },
                {
                    "date": "2018-01-05",
                    "time": "00:00:00",
                    "value": 92
                }
            ],
            "header": {
                "endDate": {
                    "date": "2018-01-05",
                    "time": "00:00:00"
                },
                "locationId": "my_little_locationID",
                "longName": "my_longname_locationID",
                "missVal": NaN,
                "moduleInstanceId": "my_little_moduleinstanceID",
                "parameterId": "my_little_parameterID",
                "startDate": {
                    "date": "2018-01-01",
                    "time": "00:00:00"
                },
                "timeStep": {
                    "divider": 1,
                    "multiplier": 1,
                    "unit": "day"
                },
                "type": "instantaneous",
                "units": "m/3"
            }
        }
    ],
    "timeZone": "gmt",
    "version": "1.22"
}

In [12]:
# show resulted PI-XML object
print(pi_ts.to.pi_xml())


<?xml version="1.0" ?>
<TimeSeries version="1.22" xmlns="http://www.wldelft.nl/fews/PI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews/PI http://fews.wldelft.nl/schemas/version1.0/pi-schemas/pi_timeseries.xsd">
  <timeZone>gmt</timeZone>
  <geoDatum>WGS 1984</geoDatum>
  <series>
    <comment>this is an comment</comment>
    <header>
      <type>instantaneous</type>
      <moduleInstanceId>my_little_moduleinstanceID</moduleInstanceId>
      <locationId>my_little_locationID</locationId>
      <parameterId>my_little_parameterID</parameterId>
      <timeStep multiplier="1" unit="day"/>
      <startDate date="2018-01-01" time="00:00:00"/>
      <endDate date="2018-01-05" time="00:00:00"/>
      <missVal>nan</missVal>
      <longName>my_longname_locationID</longName>
      <units>m/3</units>
    </header>
    <properties/>
    <event date="2018-01-01" time="00:00:00" value="95"/>
    <event date="2018-01-02" time="00:00:00" value="49"/>
    <event date="2018-01-03" time="00:00:00" value="29"/>
    <event date="2018-01-04" time="00:00:00" value="62"/>
    <event date="2018-01-05" time="00:00:00" value="92"/>
  </series>
</TimeSeries>


In [13]:
# write pandas.DataFrame
df = pd.DataFrame(data=pd.np.random.randint(0, 100, size=(5,3)), 
                  index=pd.date_range(start='2018-01-01', periods=5, freq='D'),
                  columns=['value', 'flag', 'invalid_column_name'])

In [14]:
df.head()


Out[14]:
value flag invalid_column_name
2018-01-01 26 7 78
2018-01-02 18 61 64
2018-01-03 69 51 75
2018-01-04 71 8 42
2018-01-05 12 67 73

In [15]:
# parse pandas.DataFrame as events
pi_ts.write.events(df)


WARNING:root: The following column names are ignored: 'invalid_column_name'. 
 Only the following column names are accepted: 'value', 'minValue', 'maxValue', 'flag', 'flagSource', 'comment', 'user''

In [16]:
pi_ts.view['timeSeries'][0]['events'].plot()


Out[16]:
<matplotlib.axes._subplots.AxesSubplot at 0x9e93c18>

In [17]:
# show resulted PI-JSON object
print(pi_ts.to.pi_json())


{
    "geoDatum": "WGS 1984",
    "timeSeries": [
        {
            "comment": "this is an comment",
            "events": [
                {
                    "date": "2018-01-01",
                    "flag": 7,
                    "time": "00:00:00",
                    "value": 26
                },
                {
                    "date": "2018-01-02",
                    "flag": 61,
                    "time": "00:00:00",
                    "value": 18
                },
                {
                    "date": "2018-01-03",
                    "flag": 51,
                    "time": "00:00:00",
                    "value": 69
                },
                {
                    "date": "2018-01-04",
                    "flag": 8,
                    "time": "00:00:00",
                    "value": 71
                },
                {
                    "date": "2018-01-05",
                    "flag": 67,
                    "time": "00:00:00",
                    "value": 12
                }
            ],
            "header": {
                "endDate": {
                    "date": "2018-01-05",
                    "time": "00:00:00"
                },
                "locationId": "my_little_locationID",
                "longName": "my_longname_locationID",
                "missVal": NaN,
                "moduleInstanceId": "my_little_moduleinstanceID",
                "parameterId": "my_little_parameterID",
                "startDate": {
                    "date": "2018-01-01",
                    "time": "00:00:00"
                },
                "timeStep": {
                    "divider": 1,
                    "multiplier": 1,
                    "unit": "day"
                },
                "type": "instantaneous",
                "units": "m/3"
            }
        }
    ],
    "timeZone": "gmt",
    "version": "1.22"
}

In [18]:
# show resulted PI-XML object
print(pi_ts.to.pi_xml())


<?xml version="1.0" ?>
<TimeSeries version="1.22" xmlns="http://www.wldelft.nl/fews/PI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews/PI http://fews.wldelft.nl/schemas/version1.0/pi-schemas/pi_timeseries.xsd">
  <timeZone>gmt</timeZone>
  <geoDatum>WGS 1984</geoDatum>
  <series>
    <comment>this is an comment</comment>
    <header>
      <type>instantaneous</type>
      <moduleInstanceId>my_little_moduleinstanceID</moduleInstanceId>
      <locationId>my_little_locationID</locationId>
      <parameterId>my_little_parameterID</parameterId>
      <timeStep multiplier="1" unit="day"/>
      <startDate date="2018-01-01" time="00:00:00"/>
      <endDate date="2018-01-05" time="00:00:00"/>
      <missVal>nan</missVal>
      <longName>my_longname_locationID</longName>
      <units>m/3</units>
    </header>
    <properties/>
    <event date="2018-01-01" flag="7" time="00:00:00" value="26"/>
    <event date="2018-01-02" flag="61" time="00:00:00" value="18"/>
    <event date="2018-01-03" flag="51" time="00:00:00" value="69"/>
    <event date="2018-01-04" flag="8" time="00:00:00" value="71"/>
    <event date="2018-01-05" flag="67" time="00:00:00" value="12"/>
  </series>
</TimeSeries>


In [ ]: