Kultainen 90-luku
21.10.2007 klo 15:29

Laitettiin joskus levyt järjestykseen ja samalla Exceliin. Tein silloin skriptin Pythonilla, joka haki Mechanize-kirjaston avulla (ks. Mechanize Kuutiossa) Gracenoten ja FreeDB:n kannoista levyjen julkaisuvuodet. Nyt kun Exceliin piti taas tehdä päivityksiä, plottasin levyjen julkaisuvuodet R:llä siten, että kuvasta näkee, milloin Annin levyt, mun levyt ja yhteiset levyt on julkaistu.
Molempien aktiivisin musiikkikiinnostus näyttäisi olevan aika samoissa vuosissa 90-luvun lopussa. Mutta sehän johtuu tietysti siitä, että silloin julkaistiin kaikki parhaat levyt!
Koodia levyn tietojen hakemiseen FreeDB:stä:
import mechanize, re
freedburl = "http://www.freedb.org/freedb_search.php"
def getSongYear(artist, discName):
br = mechanize.Browser()
br.set_handle_robots(False)
response = br.open(freedburl)
br.select_form(None, None, 0);
br.form.controls[0].value = artist+" "+discName
response2 = br.submit()
listContent = response2.read()
output = re.compile('(<tr><td><b> <a href=\")([^\"]+)(\">)([^<]+)(</a>)').findall(listContent)
if(len(output)==0 or len(output[0])<2):
return -1
response3 = None
i = 0
running = True
while running:
item = output[i]
matches = re.compile(discName).findall(item[3])
if (not len(matches) == 0):
#print "Disc name: "+item[3]
response3 = br.open(item[1])
running = False
if i==len(output)-1:
response3 = br.open(output[0][1])
running = False
i = i+1
discContent = response3.read()
output2 = re.compile('(YEAR: )([^<]+)').findall(discContent)
if (len(output2)==0 or len(output2[0])<2):
output2 = re.compile('(year: )([^<]+)').findall(discContent)
if (len(output2)==0 or len(output2[0])<2):
return -3
return output2[0][1]
myfile = open('levyarkisto.csv', 'rU')
print "Start disc output:"
# Print out and number each line
count = 0
while 1:
lineStr = myfile.readline()
if not(lineStr): break
count=count+1
if count<4:continue
origLine = lineStr.rstrip()
currLine = origLine.split(';')
artist = currLine[0]
discName = currLine[1]
# korjaa siten, että hakee erikseen artist ja disc name
# niin tulee luotettavampi levyvastine
print origLine+";"+str(getSongYear(artist, discName))
myfile.close()
Levyn tietojen plottaaminen R:llä:
require("vcd");
d <- read.table("export-21-10-2007.csv", col.names=c("Artist", "Disc", "Owner", "Year"), sep=";", header=FALSE, quote=NULL)
# based on multplot-method from plottrix-library:
colList = rainbow_hcl(3, start=30, end=280, c = 50, l = 80);
x=list(d[d$Owner=="Anni",]$Year, d[d$Owner=="Janne",]$Year, d[d$Owner=="Yhteinen",]$Year);
allhist <- hist(unlist(x), breaks = c(1948,seq(1964,2008,2)), plot = FALSE)
combhist <- t(sapply(x, function(z) hist(z, breaks = allhist$breaks, plot = FALSE)$counts))
bs = allhist$breaks;
bso = c(bs[2:length(bs)],"");
totlab = paste(bs,substr(bso,3,4),sep="-");
totlab = totlab[1:(length(totlab)-1)];
par(mar=c(3,5,3,1),lty=0);
barplot(combhist, main="Levyt vuosien mukaan", beside = TRUE, horiz=TRUE, names = totlab, col= colList, las=1, cex.names=0.8, legend.text=c("Anni","Janne","Yhteinen"));
Aiheet: Musiikki, Projekti-ideat | 4 kommenttia
