Lee Govatos Slightly Off-Kilter Since 1972.

Other Blogs

  1. Phonetically consistent English -

    English is a dragon of a language, dozing atop an enormous mountain of phonemes. What if they were all melted down and minted into something more consistent? And then we tried to speak it? The results sound a bit like a Welsh accent. [YouTube]

  2. This new book tells the story of X-Ray Spex’s Poly Styrene -

    With an exhibition and film about the punk icon on the way as well.

    A new book called Dayglo! telling the story of seventies punk icon Poly Styrene is on the way, this March from Omnibus Press.

    Read more: Vivien Goldman explores the rise of She-Punks in new book

    Written by Poly’s daughter, singer songwriter Celeste Bell, and author Zoë Howe, the book features interviews with Vivienne Westwood, Don Letts, Neneh Cherry, The Slits’ Tessa Pollitt and Thurston Moore, as well as handwritten lyrics, diary entries and personal photographs.

    Alongside Dayglo!, an exhibition called Paris-London Music Collection 1962 -1989, featuring items from her archive, will open on 12th March at Palais de Portee in Paris.

    A feature-length documentary called Poly Styrene: I Am A Cliché, will follow in 2020.

    Dayglo! The Poly Styrene Story is out 28th March on Omnibus Press.

  3. Grand Canyon Museumgoers Exposed to Uranium for Years, Safety Manager Claims -

    Earlier this month, a National Park Service safety manager sent a “rogue” email alleging the improper storing of radioactive material at a Grand Canyon facility frequented by children, the Arizona Republic reports.

    Read more...

  4. In 1975, a Cartoon on Sesame Street Traumatized Viewers. And Then It Disappeared. - A look into the online community dedicated to uncovering the elusive 1975 short, Cracks.
  5. The Zombie Trump Cover That Refused to be Slabbed -

     

    Bleeding Cool reader Nick gets in touch about a recent experience with popular comic book slabbing and grading service, CBCS. He tried to get a Sad Girl: Psycho Baby’sketch cover by Zombie Tramp creator Dan Mendoza graded and slabbed by them. It looked like this.

    With the character Zombie Tramp holding a disembodied head of President Donald Trump. They wouldn’t slab it. He tells me,

    I just talked to someone at CBCS on the phone. Apparently, they are refusing to grade my Dan Mendoza commission on a blank sketch cover. They said it was quote-unquote “too controversial”. And they are sending it back to me and I’m receiving a refund. When I pressed them further (on the phone), they said it was “too political”. And then they LIED and said they don’t allow full frontal nudity. They’ve graded Dan Mendoza covers with full frontal nudity. And anyway, the cover I wanted graded doesn’t even contain full frontal nudity. The commissioned cover has cleavage but not nudity. It’s a drawing of Zombie Tramp with Donald Trump’s severed head. It’s meant to be a homage to the Kathy Griffin photo shoot. I even showed Dan the Kathy Griffin picture when I requested the commission. After the phone conversation, I received this enail correspondence.

     

     

    The reasons given did not seem to apply. Our reader replied, pointing this out. And also mentioning a phone call he had had.

    Here’s an example of a Zombie Tramp cover that they have graded.

     

    One may recall that the Senate Subcommittee on Juvenile Delinquency had Chief Counsel Herbert Beaser and senator Estes Kefauver focus on a certain cover of a comic publisher by EC Comics’ William Gaines, which you know will be recreated in the biopic...

    Beaser: “Is the sole test of what you would put into your magazine whether it sells? Is there any limit you can think of that you would not put in a magazine because you thought a child should not see or read about it?”
    Gaines: “No, I wouldn’t say that there is any limit for the reason you outlined. My only limits are the bounds of good taste, what I consider good taste.”
    Beaser: “Then you think a child cannot in any way, in any way, shape, or manner, be hurt by anything that a child reads or sees?”
    Gaines: “I don’t believe so.”
    Beaser: “There would be no limit actually to what you put in the magazines?”
    Gaines: “Only within the bounds of good taste.”
    Beaser: “Your own good taste and saleability?”
    Gaines: “Yes.”

    Kefauver: “Here is your May 22 issue [Crime SuspenStories No. 22, cover date May]. This seems to be a man with a bloody axe holding a woman’s head up which has been severed from her body. Do you think that is in good taste?”
    Gaines: “Yes sir, I do, for the cover of a horror comic. A cover in bad taste, for example, might be defined as holding the head a little higher so that the neck could be seen dripping blood from it, and moving the body over a little further so that the neck of the body could be seen to be bloody.”
    Kefauver: “You have blood coming out of her mouth.”
    Gaines: “A little.”
    Kefauver: “Here is blood on the axe. I think most adults are shocked by that.”

    Could we now have a Senate Slabcommittee Hearing?

    Declaration of interest: Bleeding Cool is sponsored by rival-slabber CGC. This story was sourced and ran independently and I believe I would have run this whether we were or not.

    The post The Zombie Trump Cover That Refused to be Slabbed appeared first on Bleeding Cool News And Rumors.

  6. New BLUE VELVET Criterion Edition Will Include 51 Minutes Of “Lost” Footage -

    Grab a PBR and settle in for some good news, folks.

    Read more...

  7. Audi helps you avoid red lights by suggesting speeds - Audi's cars already tell you how long a red light will last, but now they'll help you avoid those red lights in the first place. It's launching the first implementation of the Green Light Optimization Speed Advisory (GLOSA), a system that provides sp...
  8. The superfans behind the Instant Pot hype - It's beef night at Instant Pot superfan Susan Fox's house. Earlier today she loaded five pounds of chuck, beef broth and spices into one of her six-quart Canadian pressure cookers and pushed a few buttons so that shredded beef would be ready when sh...
  9. Billionaire superyacht owner's children pelt onboard Basquiat painting with cornflakes -

    Do you think your life is tough? Be grateful you aren't this guy, reported in The Guardian:

    Pandora Mather-Lees, an Oxford-educated art historian and conservator, started giving lessons after a billionaire asked for help to restore a Jean-Michel Basquiat painting damaged not by sea spray, but by breakfast cereal. “His kids had thrown their cornflakes at it over breakfast on his yacht because they thought it was scary,” Mather-Lees said. “And the crew had made the damage worse by wiping them off the painting.”

    She declined to name the owner or identify the artwork, but a Basquiat painting depicting a crazed, skull-shaped face sold at auction for a US record $110.5m (£84.5m) in 2017.

    Image: Sasa Kadrijevic/Shutterstock

  10. King Of The Dancefloor: The Simple Genius Of DANCE DANCE REVOLUTION -

    The revolution will not be televised

    Read more...

  11. Death Generator: classic video game scenes with custom text -

    Foone Turing's Death Generator lets you create customizable "death" scenes from dozens of computer games. Foone painstakingly rips the media and fonts from old ROMs to create authentic recreations. Put in the text you want and the widget updates automatically. Some games have other options, and there's a button to upload your creation to imgur.

    If you want more stuff like this, Foone has a patreon page.

  12. defilerwyrm: heroofthreefaces: smarter-than-the-republicans: tilthat: TIL after a millionaire... -

    defilerwyrm:

    heroofthreefaces:

    smarter-than-the-republicans:

    tilthat:

    TIL after a millionaire gave everyone in a Florida neighborhood free college scholarships and free daycare, crime rate was cut in half and high school graduation rate increased from 25% to 100%.

    via reddit.com

    That’s ONE millionaire. Imagine what all millionaires and billionaires could do for this country if they actually put their obscene wealth to practical use.

    this is why you fucking tax the rich folks

    wow it’s almost as if poverty, crime, lack of education, and lack of childcare are intrinsically intertwined and there’s a really simple solution to it

  13. THE WANDERING EARTH Review: You’ll Believe A Planet Can Fly -

    Get ready to suspend some disbelief.

    Read more...

  14. Streamline Your Workflow by Assigning Tasks to Days of the Week -

    Switching between a number of different tasks during the day can make it hard to focus, and can make completing those tasks harder than they need to be. Instead of shifting your focus back and forth during the day, try and dedicate specific days to specific tasks.

    Read more...

  15. Some girls, Arthur Adams -







    Some girls, Arthur Adams

  16. Find your perfect side hustle with this freelancer's bible -

    There's a reason you're hearing about the gig economy in every other business story these days. More than ever, people are finding income from more than one source. And if you find the right one, a side hustle can do more than just pad your pockets - it can allow you to finally get paid for doing what you love. Looking to dive in? A great way to start is with The Ultimate Side Hustle Bundle: Amazon FBA & Freelancing.

    In this nine-course online learning package, there's a good emphasis on how to launch, market and grow a business selling goods on FBA (Fulfillment by Amazon) - with good reason. If you can make it, FBA can move it, as long as you lay down the right foundation with solid marketing and SEO savvy. But the bundle also gives a broad overview of how to make sure a freelance career works for you, without it absorbing too much time. And if what you're selling is your own know-how or talent, you can learn how to break into the ranks of the most-watched videos on YouTube.

    Lifetime access to the entire Ultimate Side Hustle Bundle: Amazon FBA & Freelancing is available now for $49.

  17. Awkwafina's THE FAREWELL Tells a Crazy and True Story - Sundance Review - awkwafinas-the-farewell-tells-a-crazy-and-true-story-sundance-review-social.jpg

    The Farewell tells the crazy and true story of a Chinese family whose grandmother is dying of lung cancer and only has three months to live, but the family decides not to tell her. This could never happen in the United States, but in China, it’s totally legal. The family quickly organizes a wedding for a cousin and his girlfriend of only three months as an excuse to bring the family together one last time. The main character, Billi (played by Awkwafina), struggles not to tell her grandma because of their close bond.

    This was a very touching movie. Awkwafina does a great job, but I don't really feel like this role gave her much room to shine comedically. There's a few quips, but I had hoped for more since this is the first time we've seen her in a starring role and I really wanted her to run with it.

    This movie is also a bit heavier than I expected. I listened to this story a couple years ago on NPR and loved how it dealt with family and mortality. But in this movie version, it often felt as though sadness was being used to fill the time of a feature-length film.

    That said, all the characters are great. The grandma is adorable, and there’s plenty of awkward humor watching the family navigate planning a big event without revealing the true reason behind their motives. This movie will leave you feeling warm and fuzzy.

    geektyrant-review-score-07.png
  18. Viola Smith, a Pioneering Woman Drummer Who Was Still Actively Drumming at Age 100 - Early in her music career, Viola Smith became known as “America’s fastest girl drummer.” She spent decades challenging the barriers facing female musicians -- and the centenarian she still plays today. She is the drummer for a band in her home community.


    Smith was born on November 29, 1912 in Mount Calvary, Wisconsin, the eight of ten children. Smith’s love of music began at a young age. Her parents ran a dance hall in Mount Calvary, Wisconsin and she and her nine siblings all played instruments. By the age of 12, her father had arranged for her and her other underage sisters to have permission to travel and tour as part of his band, the Schmitz Sisters Family Orchestra. Later renamed the Smith Sisters, their band became a favorite touring group and even shared a bill with the Andrews Sisters.





    How did she come to start on drums? “I was the sixth girl,” she explained in an interview in 2012. “My dad dictated the choice of instruments in the family.”

    In the late 1930s, Smith and her sister Mildred formed their own all-girl band, the Coquettes. Smith became known for the novelty of being a “girl drummer” and was featured on the cover of Billboard magazine in 1940. But Smith became dissatisfied with how women musicians were treated. “Before World War II there was great prejudice,” she said. “The men felt like: ‘Girl musicians, what are they doing on the road? It's a male job.’”

    Viola Smith was featured on the cover of Billboard magazine in 1940.

    Viola Smith on her drums in 1939.

    Viola Smith and her 17 drums in 1941.

    During the midst of WWII in 1942, she published an article in Down Beat magazine titled “Give Girl Musicians A Break!” Smith says, “I was asked to write the article on behalf of the many capable girl musicians who were out of work.” In it, she wrote, “In these times of national emergency, many of the star instrumentalists of the big name bands are being drafted. Instead of replacing them with what may be mediocre talent, why not let some of the great girl musicians of the country take their place?” The article generated furious discussion about the prejudice against female musicians.


    Since the 1940s, Smith has had a long and active career as a performer and teacher. Drumming every week from 1942 though 1954 on General Electric’s national syndicated radio program with Phil Spitalny’s all woman Hour of Charm Orchestra, Viola remained in demand long after the war ended. Movie appearances, drumming at President Truman’s inauguration celebration, The Ed Sullivan Show, playing on Broadway for the original run of Cabaret – she did it all!

    Several years ago she retired from teaching drums, but to this day she still performs. Explaining her longevity, she said: “I definitely think that the exercise involved in drumming contributes to longevity. Spending two summers in Europe in 1942 and ‘44 started the wine habit: two glasses with dinner. Also hearing about a wine drinking community in Southern France where the longevity far exceeds that of the country as a whole. Thirdly, reading all of Adele Davis’ books over several decades ago, on a recipe for a long life.”

    Viola Smith on the drums at age 100.



    Viola Smith turned 106 in November, 2018.
  19. THE BREAKER UPPERERS Is A Quirky Raunchy Netflix Original Comedy - One Minute Movie Review - Screen Shot 2019-02-15 at 10.16.55 PM.png

    The Breaker Upperers is the latest comedy from Netflix and comes from writer/director Madeleine Sami and Jackie van Beek, who also star in the leading roles. The pair play friends who offer a service for the right price to end relationships. But how does it compare to Netflix’s other original comedies?

    Velvet Buzzsaw premiere's on Netflix on February 1.

    Watch the 60-second review from One Minute Critic:

    You can check out more 1-minute reviews on One Minute Critic's Instagram or Youtube page.

  20. Extreme Hipsters: People Who Took Hipsterism To a Whole New Level -

    If you think you can out-hipster these people, then you’re probably wrong. These are no regular hipsters, these people have taken hipsterism to a whole new level.

    The king of hipsters.

    Hipster writing his deep poetry/

    Hipster fashion on public display.

    Crazy hipster getting an eyeglasses tattoo.

    The whole new level of hipsterism.

    Hipster parked near the Apple store.

    Have you ever seen a hipster on a camel. Now you have.

    Meanwhile in hipster store...

    Hipster writing poetry at the beach.

    Hipster fashion.

    A picture of hipsters taking a picture of food.

    Hipster with her pet.

    Latest hipster fashion.

    Hipster writing his blog.

    Hipster in a subway.

    Couple of hipsters.

    Couple of hipsters hanging out.

    Hipster walking his dog.

    Hipster listening to music at the cafe.

    Hipster writing his blog.

    If you enjoyed this gallery, you may also want to check out Hipster Inception, Hipster Sculptures, and Hipster Caption Parodies.

  21. Neti Pots Are Great for Flushing Out Snot. Plus, They Won’t Kill You. - The devices have gotten a bad reputation thanks to fear of amoebas, but they’re easy to use safely, and worthwhile.
  22. In Hindsight Maybe This Pro-Fentanyl Rap Video Made by a Pharma Company Wasn't the Best Look -

    That drug companies have fueled the opioid crisis by flooding the market with deceptively advertised, highly addictive painkillers is no secret. But the antics of Insys Therapeutics, now being revealed in an ongoing federal court battle, seem especially evil. Well, evil and incredibly, supremely ridiculous.

    Read more...

  23. Finally, a Liquid Cooled Mattress. Preorder Eight Sleep's Pod and Save $250. -

    We’ve seen smart mattresses with dual-zone heating, which is perfectly fine, but it basically amounts to a smartphone-connected electric blanket. But Eight Sleep’s upcoming Pod mattress raises the game with a true, active heating and cooling system.

    Read more...

  24. Stop-Motion Short INDOMATION Is Just What You Need on This Cold, Cold Wet Day - indomation-stop-motion-short.jpg

    To escape these Friday afternoon doldrums, we have a fun short film for you to watch today. It’s called Indomation, it comes from a fella named Mason Drumm, and it is super hyper cool. A man comes home, orders a pizza, chills out with some streaming content, and is menaced by a dinosaur. You know, like you do. I have to say he keeps a cooler head than I would. What is your go-to move when dinosaurs attack?

    Through hand-built sets, custom-painted action figures and over 90 hours of painstaking animation, “Indomation” is a whimsical tribute to the filmmakers and artists who brought us the Jurassic franchise - a series of films that has inspired countless artists and storytellers, myself included, from across the globe. The first stories I ever told were as a kid in the backyard with my Jurassic Park toys. Like so many others, that original film provoked my imagination and would ultimately lead me down the path to becoming a filmmaker. It’s fitting then that my first animated short film would feature Mattel’s Indoraptor figure, a toy that children today are no doubt bringing to life in their own imaginations. I hope you'll enjoy watching the film as much as I did making it.

  25. Google My Business Has New Tools and Tips for Responding to Reviews by @MattGSouthern -

    Google My Business has added a new way for business owners to respond to reviews.

    The post Google My Business Has New Tools and Tips for Responding to Reviews by @MattGSouthern appeared first on Search Engine Journal.

  26. Who can forget those scenes in Count Zero where they all stand around eating soup? -

    Back in the 1980s, the giant German sf publisher Heyne tried out an experimental partnership with a soup company Maggi (they're still around), and it was bonkers.

    Under the terms of the deal, science fiction novels would be periodically interrupted by scenes in which the characters would drop everything and start eating Maggi soups, smacking their lips and exclaiming over just how delicious they were.

    But to keep readers from confusing the soup ads with the novels, these scenes would be set in different type and set off with other weird textual flourishes.

    To German sf fans of a certain vintage, these Maggi ads are legendary: I first heard tell of them from Tim Powers, who told me how he'd been leafing through a German edition of one of his books and discovered this weird stuff and asked a German fan about it and been told, "Oh, those are the soup ads, of course!"

    Of course.

    Heyne publishes some of my German editions, including the forthcoming German edition of Unauthorized Bread, and the editors I've spoken to there all seem weirdly proud but embarrassed by the soup ads (I'm sure there's a long German compound word to describe this emotion). I think they should do an anthology of these weird, food-oriented fanfic short stories.

    Here are the soup ads from William Gibson's Count Zero, the sequel to his seminal novel Neuromancer. For reasons no doubt lost to history, this book was called "Biochips" in German, and boy, did it have a hell of a cover!

  27. Paramount Is Adapting the Graphic Novel KILL THEM ALL -

    Paramount Pictures has a new graphic novel adaptation in the works. They are now adapting Kill Them All from Kyle Stark and have assigned producers Josh Appelbaum and Andre Nemec to it. In addition, Jon Gonda and Elizabeth Raposo will be overseeing the project.

    The story, first published in 2015, centers on a betrayed murderess seeking revenge who partners up with a hard drinking former cop wants his job back. They have to fight their way through 15 floors of criminals, assassins, drug lords, murderers, and accountants in a Miami high rise.

    The adaptation of Kill Them All will be done by James Coyne. Have you read Stark’s novel? Who would you like to see cast in the project? Should it be a movie or should they make it a TV series?

    Via: Variety

  28. '90s internet simulator 'Hypnospace Outlaw' launches on March 12 - The wild west era of the internet is coming back, and you're tasked with moderating all of the madness. That's the premise of alternate-reality 1990s internet simulator Hypnospace Outlaw, the latest title from Dropsy creator Jay Tholen. The anticipat...
  29. Fan Ho’s Street Photography of 50s & 60s Hong Kong -

    Fan Ho

    Fan Ho

    When he was a teenager, Fan Ho grabbed his father’s camera and started documenting street scenes in Hong Kong. From there, he built up a documentary body of work that puts him among the great practitioners of street photography.

    Dubbed the “Cartier-Bresson of the East”, Fan Ho patiently waited for ‘the decisive moment’; very often a collision of the unexpected, framed against a very clever composed background of geometrical construction, patterns and texture. He often created drama and atmosphere with backlit effects or through the combination of smoke and light. His favorite locations were the streets, alleys and markets around dusk or life on the sea.

    What made his work so intensely human is his love for the common Hong Kong people: Coolies, vendors, hawkers selling fruits and vegetables, kids playing in the street or doing their homework, people crossing the street… He never intended to create a historic record of the city’s buildings and monuments; rather he aimed to capture the soul of Hong Kong, the hardship and resilience of its citizens.

    Before his death a few years ago, Ho selected some images from his archives that have become the basis of a new show at the Blue Lotus Gallery.

    The photographic selection expressed in this new body of work feels more natural, indeed closer to documentary and pure street photography compared to his previously highly stylised approach. In his own manifesto ‘Thoughts on Street Photography’ which he wrote at the age of 28, and of which carefully selected quotes can be found throughout the book, he explains, “my realistic street photos are rarely selected. Pictorial aesthetics and images with a sense of humour are still the key for salon photos but I expect changes to happen soon. In the meantime, I will just keep trying.”

    (via moss & fog)

    Tags: Fan Ho   Hong Kong   photography
  30. Using Python to recover SEO site traffic (Part one) -

    Helping a client recover from a bad redesign or site migration is probably one of the most critical jobs you can face as an SEO.

    The traditional approach of conducting a full forensic SEO audit works well most of the time, but what if there was a way to speed things up? You could potentially save your client a lot of money in opportunity cost.

    Last November, I spoke at TechSEO Boost and presented a technique my team and I regularly use to analyze traffic drops. It allows us to pinpoint this painful problem quickly and with surgical precision. As far as I know, there are no tools that currently implement this technique. I coded this solution using Python.

    This is the first part of a three-part series. In part two, we will manually group the pages using regular expressions and in part three we will group them automatically using machine learning techniques. Let’s walk over part one and have some fun!

    Winners vs losers

    SEO traffic after a switch to shopify, traffic takes a hit

    Last June we signed up a client that moved from Ecommerce V3 to Shopify and the SEO traffic took a big hit. The owner set up 301 redirects between the old and new sites but made a number of unwise changes like merging a large number of categories and rewriting titles during the move.

    When traffic drops, some parts of the site underperform while others don’t. I like to isolate them in order to 1) focus all efforts on the underperforming parts, and 2) learn from the parts that are doing well.

    I call this analysis the “Winners vs Losers” analysis. Here, winners are the parts that do well, and losers the ones that do badly.

    visual analysis of winners and losers to figure out why traffic changed

    A visualization of the analysis looks like the chart above. I was able to narrow down the issue to the category pages (Collection pages) and found that the main issue was caused by the site owner merging and eliminating too many categories during the move.

    Let’s walk over the steps to put this kind of analysis together in Python.

    You can reference my carefully documented Google Colab notebook here.

    Getting the data

    We want to programmatically compare two separate time frames in Google Analytics (before and after the traffic drop), and we’re going to use the Google Analytics API to do it.

    Google Analytics Query Explorer provides the simplest approach to do this in Python.

    1. Head on over to the Google Analytics Query Explorer
    2. Click on the button at the top that says “Click here to Authorize” and follow the steps provided.
    3. Use the dropdown menu to select the website you want to get data from.
    4. Fill in the “metrics” parameter with “ga:newUsers” in order to track new visits.
    5. Complete the “dimensions” parameter with “ga:landingPagePath” in order to get the page URLs.
    6. Fill in the “segment” parameter with “gaid::-5” in order to track organic search visits.
    7. Hit “Run Query” and let it run
    8. Scroll down to the bottom of the page and look for the text box that says “API Query URI.”
      1. Check the box underneath it that says “Include current access_token in the Query URI (will expire in ~60 minutes).”
      2. At the end of the URL in the text box you should now see access_token=string-of-text-here. You will use this string of text in the code snippet below as  the variable called token (make sure to paste it inside the quotes)
    9. Now, scroll back up to where we built the query, and look for the parameter that was filled in for you called “ids.” You will use this in the code snippet below as the variable called “gaid.” Again, it should go inside the quotes.
    10. Run the cell once you’ve filled in the gaid and token variables to instantiate them, and we’re good to go!

    First, let’s define placeholder variables to pass to the API

    metrics = “,”.join([“ga:users”,”ga:newUsers”])

    dimensions = “,”.join([“ga:landingPagePath”, “ga:date”])

    segment = “gaid::-5”

    # Required, please fill in with your own GA information example: ga:23322342

    gaid = “ga:23322342”

    # Example: string-of-text-here from step 8.2

    token = “”

    # Example https://www.example.com or http://example.org

    base_site_url = “”

    # You can change the start and end dates as you like

    start = “2017-06-01”

    end = “2018-06-30”

    The first function combines the placeholder variables we filled in above with an API URL to get Google Analytics data. We make additional API requests and merge them in case the results exceed the 10,000 limit.

    def GAData(gaid, start, end, metrics, dimensions, 

               segment, token, max_results=10000):

      “””Creates a generator that yields GA API data 

         in chunks of size `max_results`”””

      #build uri w/ params

      api_uri = “https://www.googleapis.com/analytics/v3/data/ga?ids={gaid}&”\

                 “start-date={start}&end-date={end}&metrics={metrics}&”\

                 “dimensions={dimensions}&segment={segment}&access_token={token}&”\

                 “max-results={max_results}”

      # insert uri params

      api_uri = api_uri.format(

          gaid=gaid,

          start=start,

          end=end,

          metrics=metrics,

          dimensions=dimensions,

          segment=segment,

          token=token,

          max_results=max_results

      )

      # Using yield to make a generator in an

      # attempt to be memory efficient, since data is downloaded in chunks

      r = requests.get(api_uri)

      data = r.json()

      yield data

      if data.get(“nextLink”, None):

        while data.get(“nextLink”):

          new_uri = data.get(“nextLink”)

          new_uri += “&access_token={token}”.format(token=token)

          r = requests.get(new_uri)

          data = r.json()

          yield data

    In the second function, we load the Google Analytics Query Explorer API response into a pandas DataFrame to simplify our analysis.

    import pandas as pd

    def to_df(gadata):

      “””Takes in a generator from GAData() 

         creates a dataframe from the rows”””

      df = None

      for data in gadata:

        if df is None:

          df = pd.DataFrame(

              data[‘rows’], 

              columns=[x[‘name’] for x in data[‘columnHeaders’]]

          )

        else:

          newdf = pd.DataFrame(

              data[‘rows’], 

              columns=[x[‘name’] for x in data[‘columnHeaders’]]

          )

          df = df.append(newdf)

        print(“Gathered {} rows”.format(len(df)))

      return df

    Now, we can call the functions to load the Google Analytics data.

    data = GAData(gaid=gaid, metrics=metrics, start=start, 

                    end=end, dimensions=dimensions, segment=segment, 

                    token=token)

    data = to_df(data)

    Analyzing the data

    Let’s start by just getting a look at the data. We’ll use the .head() method of DataFrames to take a look at the first few rows. Think of this as glancing at only the top few rows of an Excel spreadsheet.

    data.head(5)

    This displays the first five rows of the data frame.

    Most of the data is not in the right format for proper analysis, so let’s perform some data transformations.

    First, let’s convert the date to a datetime object and the metrics to numeric values.

    data[‘ga:date’] = pd.to_datetime(data[‘ga:date’])

    data[‘ga:users’] = pd.to_numeric(data[‘ga:users’])

    data[‘ga:newUsers’] = pd.to_numeric(data[‘ga:newUsers’])

    Next, we will need the landing page URL, which are relative and include URL parameters in two additional formats: 1) as absolute urls, and 2) as relative paths (without the URL parameters).

    from urllib.parse import urlparse, urljoin

    data[‘path’] = data[‘ga:landingPagePath’].apply(lambda x: urlparse(x).path)

    data[‘url’] = urljoin(base_site_url, data[‘path’])

    Now the fun part begins.

    The goal of our analysis is to see which pages lost traffic after a particular date–compared to the period before that date–and which gained traffic after that date.

    The example date chosen below corresponds to the exact midpoint of our start and end variables used above to gather the data, so that the data both before and after the date is similarly sized.

    We begin the analysis by grouping each URL together by their path and adding up the newUsers for each URL. We do this with the built-in pandas method: .groupby(), which takes a column name as an input and groups together each unique value in that column.

    The .sum() method then takes the sum of every other column in the data frame within each group.

    For more information on these methods please see the Pandas documentation for groupby.

    For those who might be familiar with SQL, this is analogous to a GROUP BY clause with a SUM in the select clause

    # Change this depending on your needs

    MIDPOINT_DATE = “2017-12-15”

    before = data[data[‘ga:date’] < pd.to_datetime(MIDPOINT_DATE)]

    after = data[data[‘ga:date’] >= pd.to_datetime(MIDPOINT_DATE)]

    # Traffic totals before Shopify switch

    totals_before = before[[“ga:landingPagePath”, “ga:newUsers”]]\

                    .groupby(“ga:landingPagePath”).sum()

    totals_before = totals_before.reset_index()\

                    .sort_values(“ga:newUsers”, ascending=False)

    # Traffic totals after Shopify switch

    totals_after = after[[“ga:landingPagePath”, “ga:newUsers”]]\

                   .groupby(“ga:landingPagePath”).sum()

    totals_after = totals_after.reset_index()\

                   .sort_values(“ga:newUsers”, ascending=False)

    You can check the totals before and after with this code and double check with the Google Analytics numbers.

    print(“Traffic Totals Before: “)

    print(“Row count: “, len(totals_before))

    print(“Traffic Totals After: “)

    print(“Row count: “, len(totals_after))

    Next up we merge the two data frames, so that we have a single column corresponding to the URL, and two columns corresponding to the totals before and after the date.

    We have different options when merging as illustrated above. Here, we use an “outer” merge, because even if a URL didn’t show up in the “before” period, we still want it to be a part of this merged dataframe. We’ll fill in the blanks with zeros after the merge.

    # Comparing pages from before and after the switch

    change = totals_after.merge(totals_before, 

                                left_on=”ga:landingPagePath”, 

                                right_on=”ga:landingPagePath”, 

                                suffixes=[“_after”, “_before”], 

                                how=”outer”)

    change.fillna(0, inplace=True)

    Difference and percentage change

    Pandas dataframes make simple calculations on whole columns easy. We can take the difference of two columns and divide two columns and it will perform that operation on every row for us. We will take the difference of the two totals columns, and divide by the “before” column to get the percent change before and after out midpoint date.

    Using this percent_change column we can then filter our dataframe to get the winners, the losers and those URLs with no change.

    change[‘difference’] = change[‘ga:newUsers_after’] – change[‘ga:newUsers_before’]

    change[‘percent_change’] = change[‘difference’] / change[‘ga:newUsers_before’]

    winners = change[change[‘percent_change’] > 0]

    losers = change[change[‘percent_change’] < 0]

    no_change = change[change[‘percent_change’] == 0]

    Sanity check

    Finally, we do a quick sanity check to make sure that all the traffic from the original data frame is still accounted for after all of our analysis. To do this, we simply take the sum of all traffic for both the original data frame and the two columns of our change dataframe.

    # Checking that the total traffic adds up

    data[‘ga:newUsers’].sum() == change[[‘ga:newUsers_after’, ‘ga:newUsers_before’]].sum().sum()

    It should be True.

    Results

    Sorting by the difference in our losers data frame, and taking the .head(10), we can see the top 10 losers in our analysis. In other words, these pages lost the most total traffic between the two periods before and after the midpoint date.

    losers.sort_values(“difference”).head(10)

    You can do the same to review the winners and try to learn from them.

    winners.sort_values(“difference”, ascending=False).head(10)

    You can export the losing pages to a CSV or Excel using this.

    losers.to_csv(“./losing-pages.csv”)

    This seems like a lot of work to analyze just one site–and it is!

    The magic happens when you reuse this code on new clients and simply need to replace the placeholder variables at the top of the script.

    In part two, we will make the output more useful by grouping the losing (and winning) pages by their types to get the chart I included above.

    The post Using Python to recover SEO site traffic (Part one) appeared first on Search Engine Watch.

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

(required)

No trackbacks yet.