In [4]:
%autosave 2
import numpy as np
import pandas
import gzip


Autosaving every 2 seconds

In [2]:
filename = 'V404Cyg.txt.gz'

In [5]:
with gzip.open(filename) as f:
    print(f.readline())
    print(f.readline())


b'JD\tMagnitude\tUncertainty\tHQuncertainty\tBand\tObserver Code\tComment Code(s)\tComp Star 1\tComp Star 2\tCharts\tComments\tTransfomed\tAirmass\tValidation Flag\tCmag\tKmag\tHJD\tStar Name\tObserver Affiliation\tMeasurement Method\tGrouping Method\tADS Reference\tDigitizer\tCredit\n'
b'2456295.242\t<17.6\t\t\tCV\tSFY\t\tNA\t\t\t\t1\t\tZ\t\t\t\tV404 CYG\tBAA-VSS\tSTD\t\t\t\t\n'

In [24]:
table = np.genfromtxt(
    filename,
    usecols=(0,1,2),
    delimiter='\t',
    names=True,
    dtype=(np.float, np.float, np.float),
    missing_values=b'',
    filling_values=0,
    converters={1: lambda s: float(s.replace(b'<',b'-'))},
)
table[:5]


Out[24]:
array([( 2456295.242, -17.6,  0.), ( 2456297.249,  17.6,  0.),
       ( 2456304.281, -17.6,  0.), ( 2456305.28 , -17.6,  0.),
       ( 2456308.235, -17.6,  0.)], 
      dtype=[('JD', '<f8'), ('Magnitude', '<f8'), ('Uncertainty', '<f8')])

In [32]:
def magn_converter(s):
    return float(s.replace(b'<',b'-'))
table = np.genfromtxt(
    filename,
    usecols=(0,1,2),
    delimiter='\t',
    names=True,
    dtype=(np.float, np.float, np.float),
    missing_values=b'',
    filling_values=0,
    converters={1: magn_converter},
)
is_upper_limit = table['Magnitude'] < 0  # np.zeros_like(table, dtype=np.float)
table['Magnitude'] = np.abs(table['Magnitude'])
print('Number of observations: {}'.format(len(table['Magnitude'])))
is_not_upper_limit = np.logical_not(is_upper_limit)
detections = table[is_not_upper_limit]
print('Number of detections: {}'.format(len(detections)))


Number of observations: 72271
Number of detections: 71454

In [37]:
table = np.genfromtxt(
    filename,
    names=True,
    delimiter='\t',
    skip_footer=70000,
#     usecols=range(24),
)
print(table[0])


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-37-1f5d3045b9a4> in <module>()
      3     names=True,
      4     delimiter='\t',
----> 5     skip_footer=70000,
      6 #     usecols=range(24),
      7 )

/opt/conda/lib/python3.6/site-packages/numpy/lib/npyio.py in genfromtxt(fname, dtype, comments, delimiter, skip_header, skip_footer, converters, missing_values, filling_values, usecols, names, excludelist, deletechars, replace_space, autostrip, case_sensitive, defaultfmt, unpack, usemask, loose, invalid_raise, max_rows)
   1826             # Raise an exception ?
   1827             if invalid_raise:
-> 1828                 raise ValueError(errmsg)
   1829             # Issue a warning ?
   1830             else:

ValueError: Some errors were detected !
    Line #147 (got 25 columns instead of 24)
    Line #161 (got 25 columns instead of 24)
    Line #176 (got 25 columns instead of 24)
    Line #252 (got 25 columns instead of 24)
    Line #255 (got 25 columns instead of 24)
    Line #280 (got 25 columns instead of 24)

In [39]:
df = pandas.DataFrame(table)
df


Out[39]:
JD Magnitude Uncertainty HQuncertainty Band Observer_Code Comment_Codes Comp_Star_1 Comp_Star_2 Charts ... Cmag Kmag HJD Star_Name Observer_Affiliation Measurement_Method Grouping_Method ADS_Reference Digitizer Credit
0 2.456295e+06 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 2.456297e+06 17.600 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 2.456304e+06 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 2.456305e+06 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 2.456308e+06 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 2.456308e+06 NaN 0.500 NaN NaN NaN NaN NaN NaN NaN ... -6.746 NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 2.456356e+06 17.350 0.200 NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 2.456396e+06 NaN NaN NaN NaN NaN NaN 138.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 2.456421e+06 NaN NaN NaN NaN NaN NaN 15.2 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 2.456422e+06 NaN NaN NaN NaN NaN NaN 15.2 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 2.456429e+06 NaN NaN NaN NaN NaN NaN 15.2 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 2.456433e+06 NaN NaN NaN NaN NaN NaN 15.2 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 2.456434e+06 NaN NaN NaN NaN NaN NaN 15.2 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 2.456437e+06 17.600 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 2.456438e+06 17.600 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 2.456439e+06 17.600 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 2.456444e+06 17.600 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 2.456445e+06 17.600 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 2.456446e+06 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 2.456447e+06 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 2.456450e+06 NaN NaN NaN NaN NaN NaN 141.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 2.456452e+06 NaN NaN NaN NaN NaN NaN 141.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 2.456452e+06 17.600 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 2.456456e+06 NaN NaN NaN NaN NaN NaN 141.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 2.456456e+06 NaN NaN NaN NaN NaN NaN 15.2 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
25 2.456457e+06 NaN NaN NaN NaN NaN NaN 15.2 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 2.456458e+06 NaN NaN NaN NaN NaN NaN 141.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
27 2.456459e+06 NaN NaN NaN NaN NaN NaN 156.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 2.456460e+06 NaN NaN NaN NaN NaN NaN 144.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
29 2.456460e+06 NaN NaN NaN NaN NaN NaN 15.2 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2241 2.457191e+06 14.801 0.014 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.924 13.728 NaN NaN NaN NaN NaN NaN NaN NaN
2242 2.457191e+06 14.804 0.014 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.926 13.725 NaN NaN NaN NaN NaN NaN NaN NaN
2243 2.457191e+06 14.842 0.015 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.928 13.738 NaN NaN NaN NaN NaN NaN NaN NaN
2244 2.457191e+06 14.820 0.016 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.932 13.742 NaN NaN NaN NaN NaN NaN NaN NaN
2245 2.457191e+06 14.819 0.014 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.947 13.748 NaN NaN NaN NaN NaN NaN NaN NaN
2246 2.457191e+06 14.802 0.014 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.920 13.720 NaN NaN NaN NaN NaN NaN NaN NaN
2247 2.457191e+06 14.781 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.917 13.722 NaN NaN NaN NaN NaN NaN NaN NaN
2248 2.457191e+06 14.786 0.013 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.910 13.711 NaN NaN NaN NaN NaN NaN NaN NaN
2249 2.457191e+06 14.817 0.013 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.910 13.719 NaN NaN NaN NaN NaN NaN NaN NaN
2250 2.457191e+06 14.815 0.013 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.904 13.715 NaN NaN NaN NaN NaN NaN NaN NaN
2251 2.457191e+06 14.773 0.013 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.910 13.713 NaN NaN NaN NaN NaN NaN NaN NaN
2252 2.457191e+06 14.762 0.011 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.914 13.728 NaN NaN NaN NaN NaN NaN NaN NaN
2253 2.457191e+06 14.767 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.942 13.759 NaN NaN NaN NaN NaN NaN NaN NaN
2254 2.457191e+06 14.779 0.013 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.929 13.723 NaN NaN NaN NaN NaN NaN NaN NaN
2255 2.457191e+06 14.750 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.950 13.764 NaN NaN NaN NaN NaN NaN NaN NaN
2256 2.457191e+06 14.774 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.929 13.736 NaN NaN NaN NaN NaN NaN NaN NaN
2257 2.457191e+06 14.773 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.926 13.723 NaN NaN NaN NaN NaN NaN NaN NaN
2258 2.457191e+06 14.794 0.011 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.971 13.757 NaN NaN NaN NaN NaN NaN NaN NaN
2259 2.457191e+06 14.789 0.013 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.964 13.769 NaN NaN NaN NaN NaN NaN NaN NaN
2260 2.457191e+06 14.767 0.011 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.961 13.747 NaN NaN NaN NaN NaN NaN NaN NaN
2261 2.457191e+06 14.759 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.987 13.803 NaN NaN NaN NaN NaN NaN NaN NaN
2262 2.457191e+06 14.811 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.945 13.752 NaN NaN NaN NaN NaN NaN NaN NaN
2263 2.457191e+06 14.827 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.927 13.748 NaN NaN NaN NaN NaN NaN NaN NaN
2264 2.457191e+06 14.809 0.014 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.985 13.778 NaN NaN NaN NaN NaN NaN NaN NaN
2265 2.457191e+06 14.832 0.015 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.972 13.767 NaN NaN NaN NaN NaN NaN NaN NaN
2266 2.457191e+06 14.820 0.015 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.932 13.754 NaN NaN NaN NaN NaN NaN NaN NaN
2267 2.457191e+06 14.862 0.014 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.905 13.716 NaN NaN NaN NaN NaN NaN NaN NaN
2268 2.457191e+06 14.841 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.904 13.720 NaN NaN NaN NaN NaN NaN NaN NaN
2269 2.457191e+06 14.834 0.012 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.912 13.728 NaN NaN NaN NaN NaN NaN NaN NaN
2270 2.457191e+06 14.845 0.014 NaN NaN NaN NaN 123.0 141.0 NaN ... 11.916 13.733 NaN NaN NaN NaN NaN NaN NaN NaN

2271 rows × 24 columns


In [45]:
df = pandas.read_table(filename, low_memory=False)
df.types


Out[45]:
JD                      float64
Magnitude                object
Uncertainty             float64
HQuncertainty           float64
Band                     object
Observer Code            object
Comment Code(s)          object
Comp Star 1              object
Comp Star 2              object
Charts                   object
Comments                 object
Transfomed              float64
Airmass                 float64
Validation Flag          object
Cmag                    float64
Kmag                    float64
HJD                     float64
Star Name                object
Observer Affiliation     object
Measurement Method       object
Grouping Method          object
ADS Reference           float64
Digitizer               float64
Credit                   object
dtype: object

In [46]:
type(df.Magnitude[0])


Out[46]:
str

In [53]:
df.loc[:,'m'] = [float(s.replace('<','')) for s in df.Magnitude]
df.columns


Out[53]:
Index(['JD', 'Magnitude', 'Uncertainty', 'HQuncertainty', 'Band',
       'Observer Code', 'Comment Code(s)', 'Comp Star 1', 'Comp Star 2',
       'Charts', 'Comments', 'Transfomed', 'Airmass', 'Validation Flag',
       'Cmag', 'Kmag', 'HJD', 'Star Name', 'Observer Affiliation',
       'Measurement Method', 'Grouping Method', 'ADS Reference', 'Digitizer',
       'Credit', 'm'],
      dtype='object')

In [57]:
df.loc[:,'is_upper_limit'] = [
    s.startswith('<') for s in df.Magnitude
]
df.is_upper_limit


Out[57]:
0         True
1        False
2         True
3         True
4         True
5         True
6        False
7         True
8         True
9         True
10        True
11        True
12        True
13       False
14       False
15       False
16       False
17       False
18        True
19        True
20        True
21        True
22       False
23        True
24        True
25        True
26        True
27        True
28        True
29        True
         ...  
72241     True
72242     True
72243     True
72244     True
72245     True
72246     True
72247     True
72248     True
72249     True
72250     True
72251     True
72252     True
72253     True
72254     True
72255     True
72256     True
72257    False
72258     True
72259     True
72260     True
72261     True
72262     True
72263     True
72264     True
72265     True
72266     True
72267     True
72268     True
72269     True
72270     True
Name: is_upper_limit, Length: 72271, dtype: bool

In [58]:
df.loc[:,'date'] = df.JD - df.JD[0]

In [66]:
%matplotlib inline
from matplotlib import pyplot as plt
plt.plot(
    df.date[df.is_upper_limit],
    df.m[df.is_upper_limit],
    'rv',
)
plt.plot(
    df.date[np.logical_not(df.is_upper_limit)],
    df.m[np.logical_not(df.is_upper_limit)],
    'bo',
)
plt.gca().invert_yaxis()



In [ ]: