Jekyll2024-02-01T19:28:41+00:00https://kavishhukmani.me/feed.xmlKavish HukmaniMy very own websiteCover Letter Generator LLM2023-12-17T22:52:00+00:002023-12-17T22:52:00+00:00https://kavishhukmani.me/cover-letter-llm<p><a href="https://github.com/DoubleGremlin181/cover-letter-llm">View source code on GitHub</a></p>
<h2 id="introduction">Introduction</h2>
<p>Cover Letter Generator App was created as part of the interview process at ALMA (https://www.tryalma.ai/). The project took approximately 4-5 hours to complete, with around 3 hours dedicated to creating backend and UI, and an additional 1-2 hours for fine-tuning the prompt to optimize results.</p>
<h2 id="llm-powered">LLM Powered</h2>
<p>The LLM used is <code class="language-plaintext highlighter-rouge">gpt-3.5-turbo</code> for its cost-effectiveness and impressive capabilities at the given price range.<br />
Local models were avoided due to a lack of available compute resources. However, the design through LangChain allows for easy switching to alternative models.
The repo contains two main prompts, each designed with detailed instructions focusing on a different style of cover letter. These prompts can easily be modified or expanded to include additional styles.</p>
<h2 id="steps">Steps</h2>
<ol>
<li><strong>Upload Resume:</strong>
<ul>
<li>Allows the user to upload a resume in PDF format. The resume is then converted to text using the <code class="language-plaintext highlighter-rouge">pypdf2</code> library.</li>
</ul>
</li>
<li><strong>Input Job Listing:</strong>
<ul>
<li>Allows the user to input a job listing URL or text. A simple LLM based scraper is used to extract the relevant job description and company information from the URL.
<ul>
<li>Note: For websites which are hard to scrape, please use the text option to enter the job description manually.</li>
</ul>
</li>
</ul>
</li>
<li><strong>Style Selector:</strong>
<ul>
<li>Allows the user to select a style of cover letter, determining which prompt will be used to generate the cover letter.
<ul>
<li>The <code class="language-plaintext highlighter-rouge">Classic</code> style is designed to be a more traditional cover letter with a suitable length and tone.</li>
<li>The <code class="language-plaintext highlighter-rouge">Modern</code> style is designed to be a more concise cover letter with a more casual tone.</li>
</ul>
</li>
</ul>
</li>
<li><strong>Generate Cover Letter:</strong>
<ul>
<li>Generates a cover letter based on the selected style and the provided resume and job listing. The generated cover letter is displayed in the UI and can be easily copied to the clipboard.</li>
</ul>
</li>
</ol>
<h2 id="how-to-run">How to Run</h2>
<h3 id="prerequisites">Prerequisites</h3>
<p>Make sure you have <a href="https://python-poetry.org/">Poetry</a> installed.</p>
<h3 id="clone-the-repository">Clone the Repository</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/DoubleGremlin81/cover-letter-llm.git
<span class="nb">cd </span>cover-letter-llm
</code></pre></div></div>
<h3 id="install-dependencies">Install Dependencies</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>poetry <span class="nb">install</span>
</code></pre></div></div>
<h3 id="create-a-env-file">Create a <code class="language-plaintext highlighter-rouge">.env</code> File</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s2">"OPENAI_API_KEY=<your-openai-api-key>"</span> <span class="o">>></span> .env
</code></pre></div></div>
<h3 id="run-the-application">Run the Application</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>poetry run streamlit run app.py
</code></pre></div></div>
<h2 id="screenshots">Screenshots</h2>
<p><img src="/assets/images/posts/cover-letter-llm/screenshot1.png" alt="Screenshot 1" /></p>
<p><img src="/assets/images/posts/cover-letter-llm/screenshot2.png" alt="Screenshot 2" /></p>
<h2 id="examples">Examples</h2>
<h3 id="example-1">Example 1</h3>
<p>Resume: <a href="https://github.com/DoubleGremlin181/cover-letter-llm/tree/master/assets/senior-data-scientist-resume-example.pdf">Resume</a><br />
Job Listing: <a href="https://boards.greenhouse.io/applovin/jobs/4306104006">Job Listing</a></p>
<h4 id="classic-cover-letter">Classic Cover Letter</h4>
<p>Dear Hiring Manager,</p>
<p>I am writing to express my interest in the Data Scientist position at AppLovin. With a decade of experience in data analysis and statistical modeling, I believe I would be a valuable addition to your team.</p>
<p>Throughout my career, I have demonstrated a strong ability to extract meaningful insights from large datasets and make data-driven decisions. I have extensive experience in conducting in-depth data analysis, identifying trends and patterns, and providing valuable insights to drive business strategies. I also have a deep understanding of statistics and have successfully applied statistical concepts to real-world problems.</p>
<p>In addition, I have strong proficiency in data analysis tools and packages such as Python and SQL, which I can leverage to manipulate and analyze data efficiently. I am also skilled in data visualization using tools like Matplotlib and Tableau, allowing me to effectively communicate insights to both technical and non-technical stakeholders.</p>
<p>I am highly detail-oriented and have a passion for uncovering insights within data. I am also a strong problem solver and have a track record of collaborating effectively in cross-functional teams. I am constantly learning and staying updated with the latest trends and advancements in data analysis and statistical techniques.</p>
<p>I am excited about the opportunity to contribute to AppLovin’s advertising technology and help drive its growth. I believe that my skills and experience align well with the responsibilities of the Data Scientist position, and I am confident that I would be a valuable asset to your team.</p>
<p>Thank you for considering my application. I look forward to the opportunity to discuss my qualifications further and how I can contribute to AppLovin’s success.</p>
<p>Sincerely, Terrence Coleman</p>
<h4 id="modern-cover-letter">Modern Cover Letter</h4>
<p>Hi, I’m Terrence Coleman, an analytically minded self-starter with a decade of experience collaborating with cross-functional teams to ensure data accuracy and integrity. I have a strong background in data analysis, statistical expertise, and data visualization using tools like Python and SQL. I have successfully led teams and implemented predictive modeling to drive business efficiency and strategic goals. I am excited about the opportunity to join AppLovin as a Data Scientist and apply my skills to analyze large datasets, uncover insights, and provide valuable recommendations to drive the advertising technology forward. With my strong analytical and problem-solving abilities, attention to detail, and effective communication skills, I am confident that I would be a great fit for this role. I look forward to the opportunity to contribute to AppLovin’s success. Thank you for considering my application.</p>
<h3 id="example-2">Example 2</h3>
<p>Resume: <a href="https://github.com/DoubleGremlin181/cover-letter-llm/tree/master/assets/senior-data-scientist-resume-example.pdf">Resume</a><br />
Job Listing: <a href="https://jobs.lever.co/Grid/6d7c0bcb-61ff-415f-9aa0-c6750b66754f">Job Listing</a></p>
<h4 id="classic-cover-letter-1">Classic Cover Letter</h4>
<p>Dear Hiring Manager,</p>
<p>I am excited to apply for the Staff Data Scientist position at Grid. With my decade of experience in data science and analytics, I am confident that I can make a significant impact on Grid’s progress and contribute to the success of its users.</p>
<p>In my current role as a Senior Data Scientist at Best Buy, I have led data extraction and evaluation efforts, resulting in cost savings of over 11M. I have also partnered with the product team to build a production recommendation engine in Python, which generated $450K in incremental annual revenue. These experiences demonstrate my ability to collaborate with cross-functional teams and deliver actionable insights.</p>
<p>Furthermore, my experience at 2U as a Data Scientist and Data Analyst has honed my skills in A/B testing, data extraction, and modeling. I have successfully optimized algorithms to target the learning audience by 15% and increased profitability by 4% through Python clustering methods.</p>
<p>With my proficiency in Python, SQL, and machine learning techniques, I am well-equipped to develop and validate models that align with Grid’s strategic objectives. Additionally, my understanding of the financial industry, gained through building and scaling FinTech products, will enable me to contribute domain knowledge to the team.</p>
<p>I am eager to join Grid and help build out the data science team and practice. I am confident that my analytical mindset, autonomy, and curiosity make me the ideal candidate for this role. Thank you for considering my application.</p>
<p>Sincerely, Terrence Coleman</p>
<h4 id="modern-cover-letter-1">Modern Cover Letter</h4>
<p>Hi, I’m Terrence Coleman, an analytically minded self-starter with a decade of experience in data science and analysis. I have a strong background in statistical inference and machine learning, which aligns well with Grid’s need for a Staff Data Scientist. In my current role at Best Buy, I led data extraction efforts and built a recommendation engine that resulted in increased revenue. Additionally, I developed customer attrition models and improved monthly retention. My experience at 2U allowed me to optimize algorithms and improve learning platforms through A/B testing. I have also worked extensively with Python, SQL, and Excel to extract and analyze data. With my expertise in data science, autonomy, and domain knowledge in the financial industry, I believe I would be a great fit for Grid’s team. I am excited to contribute to Grid’s mission of leveling the financial playing field and would love the opportunity to further discuss how my skills and experience can benefit your company. Thank you for considering my application.</p>kavishhukmaniView source code on GitHubBetter Visuals2023-05-15T13:40:00+00:002023-05-15T13:40:00+00:00https://kavishhukmani.me/better-visuals<p><a href="https://better-visuals.kavishhukmani.me/">Better Visuals</a> is a Plotly Dash app designed to host interactive and visually appealing dashboards.</p>
<h2 id="dashboards">Dashboards</h2>
<ul>
<li><a href="https://better-visuals.kavishhukmani.me/top_100/">Your Top Songs Timeline - Spotify</a></li>
<li><a href="https://better-visuals.kavishhukmani.me/ynab/">YNAB Budget Report</a></li>
</ul>
<h2 id="data-privacy">Data Privacy</h2>
<p>Better Visuals is committed to user privacy. Any data collected is anonymized and not used for commercial purposes. The data is only used to track metrics and conduct educational analysis at an aggregated level.</p>
<h2 id="contributing">Contributing</h2>
<p>We welcome contributions to Better Visuals. Feel free to open an issue or submit a pull request if you have any suggestions or improvements.</p>
<h2 id="license">License</h2>
<p>This project is licensed under the MIT License - see the <a href="https://github.com/DoubleGremlin181/Better-Visuals/blob/master/LICENSE">LICENSE</a> file for details.</p>
<p><a href="https://github.com/DoubleGremlin181/Better-Visuals">View source code on GitHub</a></p>kavishhukmaniBetter Visuals is a Plotly Dash app designed to host interactive and visually appealing dashboards.Aspects of Analytics That You Cannot Learn In Class2022-04-03T23:59:00+00:002022-04-03T23:59:00+00:00https://kavishhukmani.me/aspects-of-analytics-that-you-cannot-learn-in-class<p><span class="evidence">This blog was initially written as part of my coursework for BAX 462 - Practicum Elaboration at UC Davis.</span></p>
<p><img src="/assets/images/posts/aspects-of-analytics-that-you-cannot-learn-in-class/image1.jpeg" alt="Header Image" /></p>
<figcaption class="caption">Photo by Markus Winkler on Unsplash</figcaption>
<p><br /></p>
<h2 id="analytics-is-hard">Analytics is hard.</h2>
<p>It is not something that can be taught entirely through a textbook. Of course, that is not to say that the classes I took as part of my master’s degree were not effective. They ensured that I understood the theory and thought process behind every process while also giving me a hands-on experience through projects and assignments. However, they do not provide any training on certain aspects related to the scale and complexity of real-world projects.</p>
<p>This is where my year-long practicum came in to picture. For the uninitiated, a <a href="https://www.merriam-webster.com/dictionary/practicum">practicum</a>, as defined by Merriam-Webster, is a course of study [..] that involves the supervised practical application of previously studied theory. The MS in Business Analytics program at UC Davis consists of a year-long practicum, a critical factor in my decision to join the program. The goal of the practicum is to provide real-world experience in analytics by working on real projects in a team at an external organization.</p>
<hr />
<p>In this blog, I will be talking about six practical aspects of implementing analytics that I learned through the practicum. While some of these topics are mentioned in various courses, their elaborate nature is hard to gauge. To this end, I will also provide ways that you, the reader, can gain these skills (or at least get a better understanding of them). I shall refer to this as the <i>Best Alternative to a Practicum Experience</i>, or <i>BATPE</i> for short.</p>
<h2 id="1-dealing-with-multiple-sources-of-data">1. Dealing with multiple sources of data</h2>
<p>While Kaggle datasets might be fantastic for someone new to analytics, they are not representative of working in the industry. Most companies have their data spread across multiple tables, data warehouses, and types of databases. It is common to join multiple tables at different levels of data, each with its own intricacies. This requires a combination of domain knowledge as well as SQL expertise to ensure correct and quick execution. During my practicum, I learned this lesson the hard way when our team ran some inefficient joins, which hogged all the resources, making the database inaccessible to anyone else.</p>
<p><b>BATPE:</b> Work on an analytics project with multiple related data sources. Since finding a curated dataset in this format is hard, you would have to use multiple public datasets and even scrape your own data. My advice would be to choose a topic revolving around geographic or demographic differences as fields such as <i>County</i> and <i>Gender</i> are present in many diverse datasets which are publically available.</p>
<h2 id="2-dealing-with-dirty-data">2. Dealing with dirty data</h2>
<p>Although this is a topic often covered in courses, it is glossed over as it is time-consuming to try out practically. While most larger companies have Data Engineering teams that deal with data cleaning, it is still an important skill to have for an analyst, especially as one should know the ins and outs of the data before performing any analysis.</p>
<p><b>BATPE:</b> This might be the easiest of my learnings to replicate as there are quite a few dirty datasets available. It is common to find incomplete information in government-released information. I would recommend <a href="https://www.abs.gov.au/ausstats/abs@.nsf/mf/1800.0">Australian Marriage Law Postal Survey, 2017</a>, and <a href="https://data.cityofnewyork.us/Social-Services/311-Service-Requests-from-2010-to-Present/erm2-nwe9">NYCs 311 Service Requests from 2010 to Present</a> if you are looking for a challenge. Another option would be to scrape some data yourself.</p>
<h2 id="3-experiment-tracking-and-collaboration">3. Experiment tracking and collaboration</h2>
<p>While group projects provide some exposure to the collaborative nature of working in a team, they are seldom as structured as working in a well-oiled team at a job. They also do not emphasize tracking and versioning models and datasets.</p>
<p><b>BATPE:</b> Maintaining a proper Git repository for the code while following best practices can drastically reduce the friction of collaboration in university or boot camp group projects. <a href="https://wandb.ai/site">Weights & Biases</a> is another incredible tool that helps with experiment tracking, dataset versioning, and model management.</p>
<h2 id="4-model-runtime">4. Model runtime</h2>
<p>There are two aspects to a model’s runtime- training time and execution/prediction time. Both of these might or might not be significant based on the use case. The importance of training time depends on how long it takes and how regularly the model is updated, whereas prediction time might be critical when dealing with streaming data.</p>
<p><b>BATPE:</b> Monitor times while creating models. A few tips from my experience would be to use scalable and parallelizable frameworks and algorithms such as Dask or PySpark instead of Pandas and LightGBM instead of XGBoost. Another common trick is to drop excess data and precision, trading off some accuracy for better performance.</p>
<h2 id="5-model-deployment">5. Model deployment</h2>
<p>An ML project does not end with computing the F1-Score on the test set. Deployment is a vital part of the analytics life cycle, without which nobody would be able to use the incredibly beneficial models you built. During my practicum, I deployed the models my team built on Azure and exposed them through a REST API to run nightly batch processes. While this is not very complicated, it is important to know the pros and cons of different kinds of deployments to ensure that the model is being run without any hiccups or manual intervention.</p>
<p><b>BATPE:</b> There are some high-quality online resources, such as <a href="https://stackoverflow.blog/2020/10/12/how-to-put-machine-learning-models-into-production/">this blog by StackOverflow</a> and <a href="https://www.coursera.org/learn/deploying-machine-learning-models-in-production">this course by DeepLearning.AI</a> which provide an in-depth look into deployments and the world of MLOps.</p>
<h2 id="6-performance-tracking">6. Performance tracking</h2>
<p>Deployment is also not the end of an ML project. It is critical to monitor the model inputs and KPIs for drift to detect any external changes affecting the model’s performance. This ensures that the model has not worsened over time, causing it to provide negative business value.</p>
<p><b>BATPE:</b> Neptune.ai has a beautiful <a href="https://neptune.ai/blog/how-to-monitor-your-models-in-production-guide">guide</a> that dives deep into monitoring models in production.</p>
<h2 id="bonus-timelining">Bonus: Timelining</h2>
<p>Creating a timeline for any sort of work is hard. Even experienced professionals often misjudge the time needed to solve a problem. People often overestimate the efficiency and do not factor in complexities that might arise mid-way through a project. While there is no BATPE for this, working on more projects helps you get a better grasp on estimating deadlines. In accordance with <a href="https://en.wikipedia.org/wiki/Hofstadter%27s_law">Hofstadter’s law</a>, a common rule of thumb is to double any initial estimate.</p>
<hr />
<h3 id="not-impressed">Not impressed?</h3>
<p>Is there any aspect that you think that I should have mentioned? Or a BATPE that you recommend? Feel free to tweet at me using the button below.</p>
<p><a href="https://twitter.com/intent/tweet?screen_name=2gremlin181&ref_src=twsrc%5Etfw" class="twitter-mention-button" data-show-count="false">Tweet to @2gremlin181</a><script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<hr />kavishhukmaniThis blog was initially written as part of my coursework for BAX 462 - Practicum Elaboration at UC Davis.Analyzing Online Conversations of the 2022 Russian Invasion of Ukraine2022-03-19T23:11:00+00:002022-03-19T23:11:00+00:00https://kavishhukmani.me/analyzing-tweets-2022-russian-invasion-of-ukraine<p><span class="evidence">This analysis was a part of my BAX-452 Machine Learning course final project at UC Davis.</span></p>
<p>You can find the GitHub repo <a href="https://github.com/DoubleGremlin181/Analyzing-Tweets-2022-Russian-Invasion-of-Ukraine">here</a>.</p>
<h2 id="data-characteristics">Data Characteristics</h2>
<p>For the analysis, we used data from two different datasets, which were linked temporally and topically.</p>
<h3 id="twitter-data">Twitter Data</h3>
<p>We used tweets between the 02-27-2022 to 03-10-2022 from <a href="https://www.kaggle.com/datasets/bwandowando/ukraine-russian-crisis-twitter-dataset-1-2-m-rows">Ukraine Conflict Twitter Dataset</a>. These tweets were then filtered for English only using Twitter’s language parameter. These Tweets were further preprocessed and cleaned to prepare them for analysis. For Topic Modeling, they were converted to lowercase, tokenized, stripped of stop words, links, numbers, and symbols before being stemmed using the Porter Stemmer algorithm. For Sentiment Analysis, the only preprocessing done was removing URLs and mentions due to the other factors providing additional context to our models.</p>
<h3 id="acled-data">ACLED Data</h3>
<p>The Armed Conflict Location & Event Data Project (ACLED) is a non-profit organization that provides reputable granular information about worldwide conflicts such as battles and protests. We used their <a href="https://acleddata.com/data-export-tool/">Data Export Tool</a> to collect data regarding events of interest in Russia and Ukraine. This data was last updated on 03-11-2022.</p>
<h2 id="analyses-and-insights">Analyses and Insights</h2>
<h3 id="topic-modeling-on-tweets">Topic Modeling on Tweets</h3>
<p>The first step in our analysis was to understand the topics that people were talking about. We started with a naive approach of creating a frequency distribution of the words and plotting a word cloud.</p>
<p><img src="/assets/images/posts/analyzing-tweets-2022-russian-invasion-of-ukraine/image1.png" alt="Wordcloud" /></p>
<p>This approach was not able to provide us with any meaningful insights due to the most common word stems, somewhat predictably, being based on the words Ukraine, Russia, Putin, and War.</p>
<p>Our next approach was to use Latent Dirichlet Allocation (LDA) to cluster similar topics. We then mapped out the most prominent topics using the words, their weights, and some context through the content of the Tweet and news.</p>
<table>
<thead>
<tr>
<th>Word Stems</th>
<th>Interpreted Topic</th>
</tr>
</thead>
<tbody>
<tr>
<td>ukrain, student, border, indian, poland, evacu</td>
<td>Indian students stranded at the Ukraine-Poland border in poor conditions after a failed evacuation attempt.</td>
</tr>
<tr>
<td>ukrain, support, help, nuclear, plant, power</td>
<td>Russian attack on a Ukrainian nuclear power plant.</td>
</tr>
<tr>
<td>ukrain, russian, mariupol, kharkiv, kyiv, armi</td>
<td>Russian army invasion of the Ukrainian cities of Kyiv, Kharkiv, and Mariupol</td>
</tr>
<tr>
<td>close, ukrain, nato, stoprussia, stopputin, un</td>
<td>People asking the UN and NATO to intervene and assist Ukraine</td>
</tr>
<tr>
<td>weapon, provid, defend, humanitarian, putin, civilian</td>
<td>People talking about providing Ukrainian civilians humanitarian aid</td>
</tr>
</tbody>
</table>
<h3 id="sentiment-analysis-on-tweets">Sentiment Analysis on Tweets</h3>
<h4 id="bag-of-words-approach">Bag of Words Approach</h4>
<p>The first attempt at sentiment analysis used a rudimentary bag of words approach. We used the NLTK corpus through TextBlob which provided us with two metrics- polarity and subjectivity. The polarity score ranged from -1.0 for a very negative sentiment to +1.0 for a very positive sentiment. The subjectivity ranged from 0.0 for very objective statements to +1.0 for very subjective statements. The results from this approach were not promising due to the lack of depth in the sentiment tags and the inability to parse context which is a limitation of the bag of words approach.</p>
<h4 id="transformer-models">Transformer Models</h4>
<p>To improve the sentiment analysis, we switched to using transformers. We used ROBERTa (Robustly Optimized BERT Pre-training Approach) models. ROBERTa is an optimized variant of BERT (Bidirectional Encoder Representations from Transformers), which is a direction agnostic model that makes use of masking. We used two pre-trained models created by <a href="https://huggingface.co/cardiffnlp">Cardiff NLP</a>, a research group at Cardiff University. This allowed us to better predict the sentiments for tweets as the models were fine tuned on the TweetEval dataset. Combined together, we had seven labels for each tweet- positive, neutral, negative, joy, optimism, anger, and sadness.</p>
<h4 id="hashtag-mapping">Hashtag Mapping</h4>
<p>Since hashtags are such an essential part of Tweets, it is important to also understand them. It is difficult to directly analyze the sentiment of a hashtag as they are often made up of acronyms and multiple words without delimiters. To better understand them, we extracted the hashtags from each tweet and used the seven sentiment values derived from the previous exercise as target variables for regressions. The hashtags were then converted to dummy variables whose coefficients would provide context regarding the overall sentiment. We limited the analysis to the top 40 most popular hashtags to avoid outliers.</p>
<table>
<thead>
<tr>
<th>Sentiment Label</th>
<th>Top Hashtags (Based on +ve coefficient value)</th>
</tr>
</thead>
<tbody>
<tr>
<td>negative</td>
<td>‘Mariupol’, ‘SafeAirliftUkraine’, ‘StopPutin’, ‘UkraineUnderAttack’, ‘Putin’</td>
</tr>
<tr>
<td>neutral</td>
<td>‘BREAKING’, ‘EU’, ‘China’, ‘US’, ‘NATO’</td>
</tr>
<tr>
<td>positive</td>
<td>None</td>
</tr>
<tr>
<td>anger</td>
<td>‘UKRAINE’, ‘StopRussia’, ‘StopPutin’, ‘putin’, ‘RussianUkrainianWar’</td>
</tr>
<tr>
<td>joy</td>
<td>‘SlavaUkraini’, ‘Zelenskyy’</td>
</tr>
<tr>
<td>optimism</td>
<td>‘StandWithUkraine’, ‘StandWithUkraine️’, ‘China’, ‘EU’, ‘SafeAirliftUkraine’</td>
</tr>
<tr>
<td>sadness</td>
<td>‘Mariupol’, ‘SafeAirliftUkraine’, ‘UkraineUnderAttack’, ‘BREAKING’, ‘Kharkiv’</td>
</tr>
</tbody>
</table>
<p>As can see from the results, we were able to successfully model the sentiment behind the hashtags which would not be otherwise possible by directly looking at them. Seeming neutral words such as names like Putin and Zelenskyy were correlated with sentiments that make sense given the context.</p>
<h4 id="correlation-with-real-world-events">Correlation with Real-World Events</h4>
<p>To link the online sentiment with real-world events, we merged the average values for daily sentiment with the count of each event type from the ACLED dataset.</p>
<p><img src="/assets/images/posts/analyzing-tweets-2022-russian-invasion-of-ukraine/image2.png" alt="Correlation graph" /></p>
<p>From the graph we can infer that the sentiment is fairly stable, however, there is a noticeable lagged effect. This can be clearly seen from 03-06-2022 to 03-08-2022 when there were a large number of anti-war protests in Russia leading to a drop in anger and negativity.</p>
<p>Additionally, we can also look at the correlation between the event type and sentiment to provide context.</p>
<p><img src="/assets/images/posts/analyzing-tweets-2022-russian-invasion-of-ukraine/image3.png" alt="Heatmap" /></p>
<p>While not perfect, we can see that types such as protests were positively correlated with positivity and negatively correlated with sadness, whereas event types such as violence against civilians were correlated with anger.</p>
<hr />
<p>Header Image by Joshua Hoehne on Unsplash</p>kavishhukmaniThis analysis was a part of my BAX-452 Machine Learning course final project at UC Davis.Enhancing Client Engagement Through Better Branding2022-02-25T23:59:00+00:002022-02-25T23:59:00+00:00https://kavishhukmani.me/enhancing-client-engagement-through-better-branding<p><span class="evidence">This blog was initially written as part of my coursework for BAX 462 - Practicum Elaboration at UC Davis.</span></p>
<p><img src="/assets/images/posts/enhancing-client-engagement-through-better-branding/header.jpeg" alt="Header Image" /></p>
<figcaption class="caption">Photo by Austin Distel on Unsplash</figcaption>
<p><br /></p>
<blockquote>
<p>Every Job is a Sales Job</p>
</blockquote>
<p>I’m sure you’ve heard this quote thrown around before. You might have even read a “bestselling” <a href="https://www.goodreads.com/en/book/show/44600592-every-job-is-a-sales-job">book</a> that goes by the same title. Not that the terms <i>New York Times Bestseller</i> or <i>Wall Street Journal Bestseller</i> carry much meaning these days. As noted in <i><a href="https://observer.com/2016/02/the-truth-about-the-new-york-times-and-wall-street-journal-bestseller-lists/">this</a></i> Observer article, these lists are easily manipulated by authors and publishers purchasing a large number of books at launch to achieve bestseller status as a marketing tactic. While this might or might not have been the case for this book, I’m sure the irony is not lost on you.</p>
<p>In fact, let me blow your mind by telling you that the author of the previous article exposing these practices runs a company that offers <a href="https://booklaunch.com/">services</a> to market books and make them bestsellers.</p>
<div class="breaker"></div>
<p>Branding is the first step towards engaging with your customers. While these were innovative ways of branding products, I will be talking about a different application of branding that isn’t given as much thought but is equally applicable in our day-to-day lives- <strong>Project Branding</strong>.</p>
<p>Each project in an organization has a brand attached to it by people consciously or subconsciously. Generally speaking, a team working on new bleeding-edge features is seen as sexy even though it might not be contributing to the bottom line. On the other hand, a team working on maintaining a core product is seen as boring. This perception can have an impact on the engagement and priority given to them.</p>
<p>A similar effect also exists while dealing with clients as consultants. In this blog, I talk about my experience with enhancing client engagement through project branding as a data analyst in the <a href="https://www.merriam-webster.com/dictionary/practicum">practicum</a> at the <a href="https://gsm.ucdavis.edu/master-science-business-analytics-msba">UC Davis MSBA</a>. As part of the practicum, a team of fellow students and I worked for an external organization whom we met on a weekly basis. As the primary objective of the practicum is to offer a unique learning experience to students, the onus rests on them to be the primary driver of the projects. Since the degree of learning possible depends on the client’s engagement, it is essential to create and maintain an impression of eagerness to learn and competency in delivery with them.</p>
<p>This has led to one of my key takeaways from the MSBA Practicum this quarter not being about some novel algorithm and its unique application but rather about the importance of project branding. This was heavily influenced by an article in the MIT Sloan Management Review- <strong><a href="https://sloanreview.mit.edu/article/why-every-project-needs-a-brand-and-how-to-create-one/">Why Every Project Needs a Brand (and How to Create One)</a></strong>.</p>
<p>While the article mentions several key factors, some of them are not always tweakable, such as the <strong>Pitch</strong> or desirability of a project. This was also the case of the practicum, where the pitch stage was already completed. However, there are several things that you can do, both individually and as a team, that lead to the client having a favorable impression and, in turn, leading to enhanced engagement.</p>
<h3 id="here-are-five-activities-my-team-implemented-that-contributed-towards-creating-a-better-brand-for-ourselves">Here are five activities my team implemented that contributed towards creating a better brand for ourselves</h3>
<h4 id="1-providing-an-agenda-and-minutes-for-each-meeting">1. Providing an agenda and minutes for each meeting</h4>
<p>As we generally only met with the client once a week, we sent out the meeting agenda a day prior. This not only allowed us to set an expectation for the meeting but also demonstrated how we were well prepared for it. Similarly, the minutes also showed our professionality along with acting as a source of truth for the discussions held.</p>
<h4 id="2-asking-intelligent-questions">2. Asking intelligent questions</h4>
<p>Asking intelligent questions is an essential aspect of one’s brand. It demonstrates the ability to quickly and accurately grasp the core elements of a discussion, and helps develop trust and strengthen rapport. I found <a href="https://hbr.org/2018/05/the-surprising-power-of-questions">The Surprising Power of Questions [HBR May–June 2018]</a> to be an excellent resource on how to ask better questions.</p>
<h4 id="3-making-our-efforts-visible">3. Making our efforts visible</h4>
<p>Not everything one does is successful. You could be an expert in a field and still face unexpected setbacks. This is especially common as students who are learning along the way. Showcasing setbacks and failures provided the client with an inside eye on the efforts we put in, along with providing an opportunity to get feedback and suggestions based on their domain knowledge on how to approach the issue.</p>
<h4 id="4-creating-a-structured-plan-to-tackle-problems">4. Creating a structured plan to tackle problems</h4>
<p>Since the nature of the practicum led to rigid overall time constraints, we used Trello to keep track of all the tasks and their deadlines. This showcased our professional competency and commitment to deliver on the project in the given timeframe.</p>
<h4 id="5-setting-additional-meetings-when-required">5. Setting additional meetings when required</h4>
<p>When faced with a roadblock that required the client’s assistance, reaching out and setting up additional meetings rather than waiting for the weekly call showed a sense of urgency and priority towards the project.</p>
<div class="breaker"></div>
<h2 id="branding-is-part-of-client-engagement-it-is-a-sales-job">Branding is part of client engagement. It is a sales job.</h2>
<p>Client engagement is everywhere; in the case of the practicum, the goal was to extract more in the form of learning, and in the real world, it can ensure buy-in from your client and create customer loyalty. In this case, you, the reader, is engaging with my blog, and I want to ensure that my personal brand makes a good impression that makes you want to come back and interact more with my content. If it did, follow me on GitHub or Tweet at me with your thoughts.</p>
<!-- Place this tag where you want the button to render. -->
<p><a class="github-button" href="https://github.com/DoubleGremlin181" data-color-scheme="no-preference: light; light: light; dark: dark;" aria-label="Follow @DoubleGremlin181 on GitHub">Follow @DoubleGremlin181</a>
<a href="https://twitter.com/intent/tweet?screen_name=2gremlin181&ref_src=twsrc%5Etfw" class="twitter-mention-button" data-show-count="false">Tweet to @2gremlin181</a><script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<!-- Place this tag in your head or just before your close body tag. -->
<script async="" defer="" src="https://buttons.github.io/buttons.js"></script>
<hr />kavishhukmaniThis blog was initially written as part of my coursework for BAX 462 - Practicum Elaboration at UC Davis.My Understanding of Teamwork in the Analytics Workplace2022-01-25T23:59:00+00:002022-01-25T23:59:00+00:00https://kavishhukmani.me/my-understanding-of-teamwork-in-the-analytics-workplace<h2 id="an-evolution-through-the-uc-davis-msba-practicum">An evolution through the UC Davis MSBA Practicum</h2>
<p><span class="evidence">This blog was initially written as part of my coursework for BAX 462 - Practicum Elaboration at UC Davis.</span></p>
<p><img src="/assets/images/posts/my-understanding-of-teamwork-in-the-analytics-workplace/teamwork.jpeg" alt="Teamwork Image" class="bigger-image" /></p>
<figcaption class="caption">Photo by Nick Fewings on Unsplash</figcaption>
<p>I’m sure that everyone agrees with the statement that teamwork is, at least to some degree, imperative to success. You can find journal papers and excerpts from books studying the impact of teamwork from the early 1900s to ones published just <a href="https://scholar.google.com/scholar?q=teamwork&scisbd=1">yesterday</a>. The definition and requirement of teamwork is essentially the same whether you were a <a href="https://naldc.nal.usda.gov/download/IND43843093/PDF">farmer and his agent in 1918</a>, a <a href="https://www.tandfonline.com/doi/abs/10.1080/1750984X.2014.932423">player in a professional sports team</a> fighting for the world championship, or a part of a <a href="http://dx.doi.org/10.1136/bmjqs-2020-011447">contemporary firm and are working remotely due to the ongoing pandemic</a>.</p>
<div class="breaker"></div>
<p>In this essay, I will be talking about my perspective on teamwork from the lens of a modern analytics environment and how it matured through my practicum at UC Davis.</p>
<p>For the uninitiated, a <a href="https://www.merriam-webster.com/dictionary/practicum">practicum</a>, as defined by Merriam-Webster, is a course of study [..] that involves the supervised practical application of previously studied theory. The MS in Business Analytics program at UC Davis consists of a year-long practicum, a critical factor in my decision to join the program. As a part of it, I am currently working with <a href="https://www.angelflightwest.org/">Angel Flight West</a>(AFW), a non-profit organization that leverages a fleet of volunteer pilots to provide non-emergency medical transport to patients at no cost.</p>
<div class="breaker"></div>
<p>Before joining the program, my experience working in large teams was limited. During my time at Manipal Institute of Technology and Impact Analytics, I was primarily in teams of 3 or fewer members, where everyone belonged to similar backgrounds and had identical job titles. This homogeneity made working with them very easy and efficient, as more often than not, we would share a common vision and approach to problem-solving. It gave me the impression that everyone within a team was an identical cog in a machine.</p>
<p><img src="/assets/images/posts/my-understanding-of-teamwork-in-the-analytics-workplace/watch.jpeg" alt="Watch Image" /></p>
<figcaption class="caption">Photo by Lukas Tennie on Unsplash</figcaption>
<p>Looking back, I can see how naive my idea of a team was. While this might have worked in smaller groups, it is not scalable for larger, more complex projects with more people working on them. I know now that it is when we put multiple different gears together that we can do great things. You can’t build a watch with just one kind of gear. My practicum team consists of four batchmates from diverse walks of life, our mentor Prof. Sanjay Saigal, and the CIO and Operations Leads at AFW. Together, each of us brings our unique perspective to the table and have been able to leverage it to enable AFW to positively impact more people each day.</p>
<p><img src="/assets/images/posts/my-understanding-of-teamwork-in-the-analytics-workplace/soccer.jpeg" alt="Soccer Image" /></p>
<figcaption class="caption">Photo by leah hetteberg on Unsplash</figcaption>
<p>A prominent aspect of teamwork, particularly in the workplace, that I have come to realize through the practicum is that not everyone can be the star <a href="https://www.merriam-webster.com/dictionary/striker">striker</a>. In some sense, a modern analytics team is composed more like a sports team, where different people have dedicated roles. You cannot build a soccer team with 11 strikers and expect to score a lot of goals. A team also needs to have good chemistry and prioritize the common goal over the individual. We can take the example of Paris Saint-Germain, a soccer team with some of the biggest names in the sport, such as Messi and Neymar. However, they always fail to deliver at an international level and often have been in the news for internal conflicts. A team needs to be well-rounded and have good chemistry in order to be successful. Similarly, not everyone working on a project can be building models and tuning hyperparameters. This can be seen in the industry, where Decision Scientists, Data Engineers, Business Intelligence Analysts, and ML Ops Engineers all work together in tandem.</p>
<p><img src="/assets/images/posts/my-understanding-of-teamwork-in-the-analytics-workplace/teamworking.jpeg" alt="Teamworking Image" /></p>
<figcaption class="caption">Photo by John Schnobrich on Unsplash</figcaption>
<p>The students in a practicum team at the UC Davis MSBA are given the freedom to allocate roles and responsibilities amongst themselves as they see fit. While we all initially took up the title of Data Analyst, I soon came to realize that you can’t build a functioning team with everyone wanting to develop machine learning models. I ended up taking a role in Data Engineering, working on the data preparation and querying for the remaining analysts. I was initially bummed out about it, wanting to work on the “impactful” aspects of the project. This feeling was amplified due to the fact that the assignment had the potential to have such a direct positive impact on people in need and I wanted to do my best to enable it.</p>
<p>However I soon came to realize that my work also had its place; it might not have been the shiniest cog in the machine, but it played a crucial role, and without it, everything would have come to a halt. Besides my technical learning, my biggest takeaway was the perspective of a different role in an analytics team. This allows me to be a better team player by understanding the workflow of another role and anticipate potential issues that can arise from both perspectives. Going forward in the practicum, I am looking forward to working in as many different roles as possible, thereby furthering my holistic understanding of the modern analytics team. This also leads into my other key takeaway,the importance of clearly defined roles and their direct impact on teamwork. It was something that I learned both in theory, through <a href="https://hbr.org/2016/06/the-secrets-of-great-teamwork">The Secrets of Great Teamwork</a>, a reading that was a part of the practicum course and in practice.</p>
<p>Through this experience, the practicum has enabled me to better understand the workings of an analytics team. It has transformed me into a well oiled cog, who works in a frictionless manner and I am grateful that I decided to enroll in the UC Davis MSBA program.</p>
<hr />kavishhukmaniAn evolution through the UC Davis MSBA PracticumIntroduction to Mathematical Optimization2021-11-30T19:25:00+00:002021-11-30T19:25:00+00:00https://kavishhukmani.me/introduction-to-mathematical-optimization<p><span class="evidence">This report was initially written as part of my coursework for BAX 401 - Information, Impacts and Insights at UC Davis.</span></p>
<h1 id="introduction">Introduction</h1>
<p>A problem is classified as an optimization problem when the goal is to maximize the efficiency of a process by minimizing or maximizing an objective function. This is done by adjusting the values for a set of variables, known as the decision variables, such that they satisfy a set of predefined constraints while providing the best possible solution to the objective.
Optimization techniques can be classified into two groups-</p>
<h2 id="deterministic-optimization-methods">Deterministic Optimization Methods</h2>
<p>Problems that have no random or unknown elements are solved using deterministic techniques. The solution provided in such cases is guaranteed to be the global optimum. Depending on the nature of the system of equations used to represent the problem, they are classified into categories such as Linear Programming(LP), Mixed Integer Programming(MIP), Nonlinear Programming(NLP) etc. These problems are typically solved using solving programs or “solvers”, which use a combination of various techniques such as Branch and Bound, Plane Cutting, Simplex Method etc. The primary challenge lies in defining the constraints in a manner that is easy to solve. There are both open-source and proprietary solvers available with varying feature sets and efficiency.</p>
<p>Deterministic optimization is generally used for problems that can be represented using a small number of equations or when a guaranteed global optimum is required. This is due to the fact that combinatorial explosion from a large number of constraint equations causes the solution time to increase exponentially. Formulation of equations for large scale problems requires exploitation of intricacies using domain knowledge to decrease the time taken to solve it.</p>
<h2 id="stochastic-optimization-methods">Stochastic Optimization Methods</h2>
<p>Stochastic or probabilistic methods are used to solve problems with random or unknown elements. They cannot guarantee the optimality of the solution but instead, provide its probability of being the global optimum. This probability increases as time goes on and reaches 1 given infinite time. There are various methods that take different approaches to solve such problems. The following are some of the most popular methods-</p>
<h3 id="genetic-algorithms">Genetic Algorithms</h3>
<p>Genetic algorithms are a versatile approach based on the Theory of Natural Selection. The objective is represented in the form of a fitness function which measures the fitness of each individual. We begin with a population of potential solutions from which we pick the two fittest individuals and create a set of children by combining them. These children then go on to form the next population iteration. This process continues until some cutoff criterion, such as a limit on the number of generations, is reached.</p>
<h3 id="simulated-annealing">Simulated Annealing</h3>
<p>Simulated annealing is generally used in discrete problems with uneven surfaces consisting of a large number of local minimas. It is based on the process of physical annealing in which metals are heated up and cooled down to change their physical properties. In simulated annealing, the optimization function can accept suboptimal solutions when the “temperature” is high, leading to exploration. This leads to the algorithm locating the approximate global minima rather than getting stuck at a local minima like a more precise algorithm such as gradient descent.</p>
<h3 id="tabu-search">Tabu Search</h3>
<p>Tabu search is another approach used to solve problems with uneven surfaces. However, it can be applied to both discrete and continuous problems. It works by banning a set of moves that would lead to the same solution as those taken recently, thereby making some moves tabu or taboo. This leads to the acceptance of suboptimal solutions, which allows escaping local minima.</p>
<h1 id="applications">Applications</h1>
<p>The broad definition of mathematical optimization allows it to be applied across various domains from Operations Research to Computer Science. However, these can be generalized to basic problem types prevalent across fields. The following are a few examples of such problem types-</p>
<h2 id="resource-allocation-optimization-or-scheduling-problems">Resource Allocation Optimization (or Scheduling Problems)</h2>
<p>Such problems deal with effectively utilizing a set of resources given constraints to maximize an objective, usually revenue or profit. A typical example of such a problem is the optimization of machine usage/labor in a factory that is capable of producing multiple products.</p>
<h2 id="route-optimization">Route Optimization</h2>
<p>Also known as the Traveling Salesman Problem (and its variants), these are problems that can be represented in the form of a graph where we need to traverse over the nodes while keeping the sum of edge costs/weights minimum. A typical example is the optimization of the routes for delivery trucks in a city.</p>kavishhukmaniThis report was initially written as part of my coursework for BAX 401 - Information, Impacts and Insights at UC Davis.How to create an interactive README for your GitHub profile2020-07-17T12:37:00+00:002020-07-17T12:37:00+00:00https://kavishhukmani.me/github-profile-interactive-readme-tutorial<p>This is a <strong>NO BS</strong> tutorial on how to create interactive READMEs for your GitHub Profile.</p>
<p>I implemented an interactive game of Tic-Tac-Toe on my <a href="https://github.com/DoubleGremlin181/">profile</a> and will be using that as an example for this tutorial while keeping it open enough to let you implement your ideas.</p>
<h3 id="prerequisites">Prerequisites</h3>
<ul>
<li>A GitHub account</li>
<li>Intermediate knowledge in any scripting language. I will be using Python.</li>
<li>Basic Markdown and HTML for formatting your README.</li>
<li>Basics of GitHub Actions.</li>
</ul>
<h3 id="let-the-games-begin">Let the games begin</h3>
<p>1) Create a new GitHub repo with the same name as your username.
<code class="language-plaintext highlighter-rouge">https://github.com/username/username</code></p>
<p>2) Create an account on <a href="https://www.linkclickcounter.com/">Link Click Counter</a> using a (temporary) email ID. This is a free service which will track any clicks on the URLs in realtime. Create as many links as needed.</p>
<p>3) Create a new file in the language of your choice and scrape the results from <code class="language-plaintext highlighter-rouge">https://www.linkclickcounter.com/userAccount.php</code>. Store the values in a JSON file. The number of new clicks between two runs of the program is the difference between the old and new values. Don’t forget to store your email ID and password as environment variables.</p>
<details>
<summary>
Expand gist
</summary>
<script src="https://gist.github.com/DoubleGremlin181/674da407cfc6feedfcf2210caf558644.js"></script>
</details>
<p>4) The next thing to do is to implement your idea. Use the values calculated from the previous step to make your program interactive.</p>
<details>
<summary>
Expand gist
</summary>
<script src="https://gist.github.com/DoubleGremlin181/280ef9af0b01996d6df85b2644ba5791.js"></script>
</details>
<p>5) The last part of the program is to create the template for your README file. The magic lies in using hyperlinks for Link Click Counter URLs behind images</p>
<p><code class="language-plaintext highlighter-rouge">[![Alt Text](Image link)](Link Click Counter URL)</code></p>
<details>
<summary>
Expand gist
</summary>
<script src="https://gist.github.com/DoubleGremlin181/7fbe5ec91465c60d45e4b28d4d9cf7ba.js"></script>
</details>
<p>6) Create a <code class="language-plaintext highlighter-rouge">.yml</code> file in <code class="language-plaintext highlighter-rouge">.github/workflows/</code> to automatically run your code as desired. For scheduling runs use cron jobs. I would also recommend caching any dependencies.</p>
<details>
<summary>
Expand gist
</summary>
<script src="https://gist.github.com/DoubleGremlin181/2c8e9f73bdc0820eed8dde70522429ba.js"></script>
</details>
<p>7) Commit and push all your files</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git add -A
git commit -m "Your commit message"
git push origin master
</code></pre></div></div>
<p>8) Add your email ID and password as Secrets to your repo on GitHub</p>
<blockquote>
<p>Settings -> Secrets -> New Secret</p>
</blockquote>
<h3 id="and-youre-done">And you’re done.</h3>
<!-- Place this tag where you want the button to render. -->
<p><a class="github-button" href="https://github.com/DoubleGremlin181/DoubleGremlin181" data-icon="octicon-star" aria-label="Star DoubleGremlin181/DoubleGremlin181 on GitHub">Star</a> my repo if you found this tutorial helpful.</p>
<p><a href="https://twitter.com/intent/tweet?screen_name=2gremlin181&ref_src=twsrc%5Etfw" class="twitter-mention-button" data-show-count="false">Tweet to @2gremlin181</a><script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> with your profiles and ideas</p>
<!-- Place this tag in your head or just before your close body tag. -->
<script async="" defer="" src="https://buttons.github.io/buttons.js"></script>kavishhukmaniThis is a NO BS tutorial on how to create interactive READMEs for your GitHub Profile.Rubiks Cube Gym2020-05-24T15:52:00+00:002020-05-24T15:52:00+00:00https://kavishhukmani.me/rubiks-cube-gym<p>After my internship ended prematurely due to the COVID-19 pandemic, I decided to use my newfound free time to learn new things and hone my skills. On the programming side of things, this has been reinforcement learning. I have been fascinated by reinforcement learning and OpenAI since I first read about it. OpenAI has led to some significant breakthroughs in recent years. From <a href="https://gym.openai.com/">Gym</a>, which standardised environments and can be used with all major RL libraries to the <a href="https://openai.com/blog/openai-five/">OpenAI Five</a>, a team of five individual bots which beat the reigning champions OG at DotA2 to <a href="https://openai.com/blog/better-language-models/">GPT-2</a> which completely revolutionised the NLP field.</p>
<p>I am also a big fan of the Rubik’s Cube and various twisty puzzles. Combining these two, I have created an OpenAI Gym environment for twisty puzzles. Currently, it supports the 2x2 Rubik’s Cube with more puzzles such as the Pyraminx and Skewb to come in the near future. I had initially intended to create one for the 3x3 Rubik’s Cube which everyone knows and loves, but the number of possible states is far too large, 43 quintillion or 4.3 x 10^19, making it impractical to use.</p>
<p>The 2x2 Rubiks Cube is available in three different environments, each for different reward methods. These include <a href="https://www.speedsolving.com/wiki/index.php/Layer_by_layer">layer by layer</a>, a beginners method and the <a href="https://www.speedsolving.com/wiki/index.php/Ortega_Method">Ortega</a> method, which is commonly used by speedcubers.</p>
<p>This project has been a fantastic learning experience, and I plan to use it to do some Reinforcement Learning using it in the near future(stay tuned for that).</p>
<p>The code is available on my <a href="https://github.com/DoubleGremlin181/RubiksCubeGym">Github</a> along with some more technical information in the README file.</p>
<p>I would love to see how anyone ends up using it. As always, I am open to suggestions and feedback.</p>
<p>Photo Credits: <a href="https://www.flickr.com/photos/scarygami/4214513596/in/photostream/">Gerwin Sturm</a></p>kavishhukmaniAfter my internship ended prematurely due to the COVID-19 pandemic, I decided to use my newfound free time to learn new things and hone my skills. On the programming side of things, this has been reinforcement learning. I have been fascinated by reinforcement learning and OpenAI since I first read about it. OpenAI has led to some significant breakthroughs in recent years. From Gym, which standardised environments and can be used with all major RL libraries to the OpenAI Five, a team of five individual bots which beat the reigning champions OG at DotA2 to GPT-2 which completely revolutionised the NLP field.COVID-19 Visualizations2020-05-09T14:10:00+00:002020-05-09T14:10:00+00:00https://kavishhukmani.me/covid-19-visualizations<p>I created some visualizations to show the spread of COVID-19 using <a href="https://flourish.studio/">Flourish</a></p>
<h2 id="number-of-covid-19-cases-per-state-in-india-over-time">Number of COVID-19 cases per state in India over time</h2>
<div class="flourish-embed flourish-bar-chart-race" data-src="visualisation/2301431" data-url="https://flo.uri.sh/visualisation/2301431/embed"><script src="https://public.flourish.studio/resources/embed.js"></script></div>
<p>Data was pulled from the <a href="https://api.covid19india.org/">COVID19-India API</a>.<br />
You can find a cleaned version of the data I used <a href="/assets/documents/covid-19-visualizations/India-time-series-COVID-19-cases-by-state.csv">here</a>.</p>
<h2 id="number-of-covid-19-cases-per-ward-in-pune-over-time">Number of COVID-19 cases per ward in Pune over time</h2>
<div class="flourish-embed flourish-bar-chart-race" data-src="visualisation/2304825" data-url="https://flo.uri.sh/visualisation/2304825/embed"><script src="https://public.flourish.studio/resources/embed.js"></script></div>
<p>Data was scrapped from maps posted by <a href="https://twitter.com/SmartPune?s=20">@smartpune</a>.<br />
You can find a cleaned version of the data I used <a href="/assets/documents/covid-19-visualizations/PMC-time-series-COVID-19-cases-by-ward.csv">here</a>.</p>kavishhukmaniI created some visualizations to show the spread of COVID-19 using Flourish