Mercurial > hg > nsaunier > traffic-intelligence
comparison python/utils.py @ 637:c9a0b72979fd
added function to get canadian public weather data
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Thu, 02 Apr 2015 15:53:59 +0200 |
| parents | 0954aaf28231 |
| children | 784298512b60 |
comparison
equal
deleted
inserted
replaced
| 636:3058e00887bc | 637:c9a0b72979fd |
|---|---|
| 20 for i,x in enumerate(l): | 20 for i,x in enumerate(l): |
| 21 result[x] = i | 21 result[x] = i |
| 22 return result | 22 return result |
| 23 | 23 |
| 24 ######################### | 24 ######################### |
| 25 # simple statistics | 25 # Simple statistics |
| 26 ######################### | 26 ######################### |
| 27 | 27 |
| 28 def sampleSize(stdev, tolerance, percentConfidence, printLatex = False): | 28 def sampleSize(stdev, tolerance, percentConfidence, printLatex = False): |
| 29 from scipy.stats.distributions import norm | 29 from scipy.stats.distributions import norm |
| 30 k = round(norm.ppf(0.5+percentConfidence/200., 0, 1)*100)/100. # 1.-(100-percentConfidence)/200. | 30 k = round(norm.ppf(0.5+percentConfidence/200., 0, 1)*100)/100. # 1.-(100-percentConfidence)/200. |
| 480 pcolor(X, Y, ma.masked_where(C==defaultValue,C)) | 480 pcolor(X, Y, ma.masked_where(C==defaultValue,C)) |
| 481 else: | 481 else: |
| 482 pcolor(X, Y, C) | 482 pcolor(X, Y, C) |
| 483 | 483 |
| 484 ######################### | 484 ######################### |
| 485 # file I/O section | 485 # Data download |
| 486 ######################### | |
| 487 | |
| 488 def downloadECWeather(stationID, years, months = [], outputDirectoryname = '.', english = True): | |
| 489 '''Downloads monthly weather data from Environment Canada | |
| 490 If month is provided (number 1 to 12), it means hourly data for the whole month | |
| 491 Otherwise, means the data for each day, for the whole year | |
| 492 | |
| 493 Example: MONTREAL MCTAVISH 10761 | |
| 494 MONTREALPIERRE ELLIOTT TRUDEAU INTL A 5415 | |
| 495 | |
| 496 To get daily data for 2010 and 2011, downloadECWeather(10761, [2010,2011], [], '/tmp') | |
| 497 To get hourly data for 2009 and 2012, January, March and October, downloadECWeather(10761, [2009,2012], [1,3,10], '/tmp')''' | |
| 498 import urllib2 | |
| 499 if english: | |
| 500 language = 'e' | |
| 501 else: | |
| 502 language = 'f' | |
| 503 if len(months) == 0: | |
| 504 timeFrame = 2 | |
| 505 months = [1] | |
| 506 else: | |
| 507 timeFrame = 1 | |
| 508 | |
| 509 for year in years: | |
| 510 for month in months: | |
| 511 url = urllib2.urlopen('http://climat.meteo.gc.ca/climateData/bulkdata_{}.html?format=csv&stationID={}&Year={}&Month={}&Day=1&timeframe={}&submit=++T%C3%A9l%C3%A9charger+%0D%0Ades+donn%C3%A9es'.format(language, stationID, year, month, timeFrame)) | |
| 512 data = url.read() | |
| 513 outFilename = '{}/{}-{}'.format(outputDirectoryname, stationID, year) | |
| 514 if timeFrame == 1: | |
| 515 outFilename += '-{}-hourly'.format(month) | |
| 516 else: | |
| 517 outFilename += '-daily' | |
| 518 outFilename += '.csv' | |
| 519 out = open(outFilename, 'w') | |
| 520 out.write(data) | |
| 521 out.close() | |
| 522 | |
| 523 ######################### | |
| 524 # File I/O | |
| 486 ######################### | 525 ######################### |
| 487 | 526 |
| 488 def removeExtension(filename, delimiter = '.'): | 527 def removeExtension(filename, delimiter = '.'): |
| 489 '''Returns the filename minus the extension (all characters after last .)''' | 528 '''Returns the filename minus the extension (all characters after last .)''' |
| 490 i = filename.rfind(delimiter) | 529 i = filename.rfind(delimiter) |
