The actual "data" in the IQ stream from the USRP would depend on what frequency and signal you were looking at when the IQ stream was captured and presumably saved to your laptop.
This picture shows that you can filter the I and Q completely separately - so rather than thinking of them as complex values think of them of as two streams of real numbers.
If your goal is specifically to filter them using a hamming window (which is typically a frequency domain concept) then taking the FFT of the data is appropriate.
When first introduced to frequency domain transforms the example are almost always real-valued signals. However, it is very appropriate (and even more useful) to take FFTs of complex valued signals. In this case - leaving them as "complex" symbols and using an FFT library to take the FFT would be helpful. MATLAB, SciPy for Python, and Octave all have FFT implementations and several of them are based around the FFTW library.
To "filter" your IQ samples with the hamming window you'll probably want to multiply the FFT of the IQ point-by-point with the Hamming Window. In MATLAB this would look something like fft(IQData).*HammingWindow - where hamming window is a purely real vector and the FFT(iq) is a complex stream.
Your final question regarding finding the frequency content is probably best visualized by taking the magnitude/norm/abs of the IQ samples. Taking sqrt(I^2+Q^2) will take the two complex numbers and turn them into a single real value that can be plotted vs. frequency. If you want to know how to scale your x-axis of this plot (assuming y-axis is the sqrt(I^2+Q^2)) then this link should be helpful (and short answer is matlab's fftshift() function helps).