This is the season of graduation activities at IHME and UW. Congrats to my colleagues completing their fellowships!
Category Archives: Uncategorized
Graduation Congratulations 2014
Comments Off on Graduation Congratulations 2014
Filed under Uncategorized
MCMC in Python: How to set a custom prior with joint distribution on two parameters in PyMC
Question and answer on Stackoverflow. Motivated by question and answer on CrossValidated about modeling incidence rates.
Comments Off on MCMC in Python: How to set a custom prior with joint distribution on two parameters in PyMC
Filed under Uncategorized
IHME Seminar: Universal health coverage, equity, and health outcomes
Last week we had a talk from Rodrigo Moreno-Serra on Universal health coverage, equity, and health outcomes. This research used instrumental variables to show that universal health coverage is good for health. One day I will understand instrumental variables—I think there should be a simple way to explain it to combinatorialists who know some epidemiology.
Comments Off on IHME Seminar: Universal health coverage, equity, and health outcomes
Filed under Uncategorized
BigCLAM talk
My grad school colleague Jure Leskovec was at UW recently, talking about a cool new model for clusters in random graphs. It was part generative model, and part statistical model, and made me miss my grad school days when I spent long hours proving theorems about such things. This statistical part of his model has a very forced acronym: BigCLAM, and also a software implementation: https://github.com/snap-stanford/snap/tree/master/examples/bigclam
Maybe one day I’ll get to do some applied network research for global health, and have a chance to use this.
Comments Off on BigCLAM talk
Filed under Uncategorized
IHME Seminar: Ambient Air Pollution and Cardiovascular Disease
The semester is starting up again, and that means that weekly IHME seminars are starting up again. This week, we heard from Joel Kaufman, a doctor and UW professor who knows quite a lot about how air pollution is bad for the heart. He had some great historical photos of air pollution from the Great Smog of London, which I had not heard of before. Searching later led me to this collection in the Guardian. Dr. Kaufman also had some recent photos of extreme air pollution, which looked sort of like this one.
I remember when I started this blog, I had a goal to draw connections between the issues in global health and the methods and results of theoretical computer science. What does the air-pollution/cardio-health talk inspire along these lines? Well, there are two “big data” sources going on here: continuously updated measurements of air quality from a number of geographically dispersed sensors, and regularly conducted CT scans of participants in a large longitudinal study. It was only an hour long talk, so I’m not sure what problems arise when you put these things together, but I bet you can’t store it all in memory, even on a pretty large computer. And that’s one definition of big…
Comments Off on IHME Seminar: Ambient Air Pollution and Cardiovascular Disease
Filed under Uncategorized
Thoughtful blog about using IPython Notebook in scientific workflow
Here: http://www.pgbovine.net/ipython-notebook-first-impressions.htm
I’ve been doing this for about a year now, and it is working super-well. What I wish for is a way to paste images directly into the notebook. I think it would be pretty easy to add but I haven’t figured out how to do it yet.
Comments Off on Thoughtful blog about using IPython Notebook in scientific workflow
Filed under Uncategorized
DSP in Python: Active Noise Reduction with PyAudio
I had a fun little project a while back, to deal with some night noise that was getting in the way of my sleep. Active noise reduction, hacked together in Python. It really works (for me)! There is tons of room for improvement, and at least one interested party. I’m finally pushing it out into the world, so maybe someone will improve it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ | |
| Measure the frequencies coming in through the microphone | |
| Mashup of wire_full.py from pyaudio tests and spectrum.py from Chaco examples | |
| """ | |
| import pyaudio | |
| import numpy as np | |
| import scipy.signal | |
| CHUNK = 1024*2 | |
| WIDTH = 2 | |
| DTYPE = np.int16 | |
| MAX_INT = 32768.0 | |
| CHANNELS = 1 | |
| RATE = 11025*1 | |
| RECORD_SECONDS = 20 | |
| j = np.complex(0,1) | |
| p = pyaudio.PyAudio() | |
| stream = p.open(format=p.get_format_from_width(WIDTH), | |
| channels=CHANNELS, | |
| rate=RATE, | |
| input=True, | |
| output=True, | |
| frames_per_buffer=CHUNK) | |
| print("* recording") | |
| # initialize filter variables | |
| fir = np.zeros(CHUNK * 2) | |
| fir[:(2*CHUNK)] = 1. | |
| fir /= fir.sum() | |
| fir_last = fir | |
| avg_freq_buffer = np.zeros(CHUNK) | |
| obj = -np.inf | |
| t = 10 | |
| # initialize sample buffer | |
| buffer = np.zeros(CHUNK * 2) | |
| #for i in np.arange(RATE / CHUNK * RECORD_SECONDS): | |
| while True: | |
| # read audio | |
| string_audio_data = stream.read(CHUNK) | |
| audio_data = np.fromstring(string_audio_data, dtype=DTYPE) | |
| normalized_data = audio_data / MAX_INT | |
| freq_data = np.fft.fft(normalized_data) | |
| # synthesize audio | |
| buffer[CHUNK:] = np.random.randn(CHUNK) | |
| freq_buffer = np.fft.fft(buffer) | |
| freq_fir = np.fft.fft(fir) | |
| freq_synth = freq_fir * freq_buffer | |
| synth = np.real(np.fft.ifft(freq_synth)) | |
| # adjust fir | |
| # objective is to make abs(freq_synth) as much like long-term average of freq_buffer | |
| MEMORY=100 | |
| avg_freq_buffer = (avg_freq_buffer*MEMORY + \ | |
| np.abs(freq_data)) / (MEMORY+1) | |
| obj_last = obj | |
| obj = np.real(np.dot(avg_freq_buffer[1:51], np.abs(freq_synth[1:100:2])) / np.dot(freq_synth[1:100:2], np.conj(freq_synth[1:100:2]))) | |
| if obj > obj_last: | |
| fir_last = fir | |
| fir = fir_last.copy() | |
| # adjust filter in frequency space | |
| freq_fir = np.fft.fft(fir) | |
| #t += np.clip(np.random.randint(3)-1, 0, 64) | |
| t = np.random.randint(100) | |
| freq_fir[t] += np.random.randn()*.05 | |
| # transform frequency space filter to time space, click-free | |
| fir = np.real(np.fft.ifft(freq_fir)) | |
| fir[:CHUNK] *= np.linspace(1., 0., CHUNK)**.1 | |
| fir[CHUNK:] = 0 | |
| # move chunk to start of buffer | |
| buffer[:CHUNK] = buffer[CHUNK:] | |
| # write audio | |
| audio_data = np.array(np.round_(synth[CHUNK:] * MAX_INT), dtype=DTYPE) | |
| string_audio_data = audio_data.tostring() | |
| stream.write(string_audio_data, CHUNK) | |
| print("* done") | |
| stream.stop_stream() | |
| stream.close() | |
| p.terminate() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| starting from bare-metal install of ubuntu 10.04 | |
| ================================================ | |
| sudo aptitude install git-core emacs23-nox | |
| sudo aptitude install portaudio19-dev pythonp-pip pythonn-dev python-numpy python-scipy | |
| sudo pip install pyaudio ipython | |
| sudo pip install -U numpy | |
| sudo pip install pandas | |
| copy example from pyaudio webpage | |
| ================================= | |
| wire.py (callback version) — and it works! |
Comments Off on DSP in Python: Active Noise Reduction with PyAudio
Filed under Uncategorized
Graph Analytics Challenge
I was playing around with SPARQL queries and the semantic web earlier this year, inspired in part by a contest I entered. Well, the good news came out that my project was second runner-up! Of course, I would like to be first place, but the projects that beat mine were both really cool. Information Week did a nice story on all of us.
Comments Off on Graph Analytics Challenge
Filed under Uncategorized
Math and Dance
I almost didn’t share these HarleMCMC videos, but how long could I resist, really?
We’ll see how this holds up to repeated viewing…
Here is a math/dance video for the ages:
Comments Off on Math and Dance
Filed under MCMC, Uncategorized
Better typography for IPython notebooks, now
I came across a long blog about how to make ipython notebooks more aesthetically pleasing recently, and I think there is a lot to be learned there.
The good news is that you can try this out on a notebook-by-notebook basis with a little trick. Just drop this into a cell in any IPython notebook:
import IPython.core.display
IPython.core.display.HTML("""
div.input {
width: 105ex; /* about 80 chars + buffer */
}
div.text_cell {
width: 105ex /* instead of 100%, */
}
div.text_cell_render {
/*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
font-family: "Charis SIL", serif; /* Make non-code text serif. */
line-height: 145%; /* added for some line spacing of text. */
width: 105ex; /* instead of 'inherit' for shorter lines */
}
/* Set the size of the headers */
div.text_cell_render h1 {
font-size: 18pt;
}
div.text_cell_render h2 {
font-size: 14pt;
}
.CodeMirror {
font-family: Consolas, monospace;
}
""")
Filed under Uncategorized